ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chetan D <ccheta...@gmail.com>
Subject update existing cache
Date Wed, 07 Jun 2017 08:41:21 GMT
Hi Pavel,

I am using the same car program which you have written in blog and i have
some doubts on that.

I have the following scenarios which i have doubts on.

1.#region using put
                    List<car> directcar = new List<car>();
                    while (rdr.Read())
                        directcar.Add(new car(rdr["Name"].ToString(),
                    cache.Put(1, directcar);
                    #endregion put
Here i am creating a cache and adding list of values with a single key

2.Using data streamer
 //using (var ldr = ignite.GetDataStreamer<int, car>(cacheCfg.Name))
                    // //ldr.PerNodeBufferSize = 1024;

                    // while (rdr.Read())
                    // {
                    // ldr.AddData((int)rdr[0], new

                    // Console.WriteLine("LDR" + ldr.ToString());

                    // }

here i am using datastreamer and adding each values with a key

3. #region adding all elements as list with single key using get datastremer
                    using (var ldr = ignite.GetDataStreamer<int,
                        List<car> cars = new List<car>();

                        while (rdr.Read())
                            cars.Add(new car(rdr["Name"].ToString(),
                        ldr.AddData(1, cars);
                        Console.WriteLine("LDR" + ldr.ToString());

                    #region reading from cache
                    foreach (ICacheEntry<int, List<car>> car in cache)
                        foreach (car cars in car.Value)

here i am using data streamer to add list of values with a single key.

so now when this application is running and all the cache data has been
loaded i have added a new record in my table.

so for that i have added a listener like this

 var mapper = new ModelToTableMapper<car>();
                mapper.AddMapping(c => c.ID, "ID");
                mapper.AddMapping(c => c.Name, "Name");
                mapper.AddMapping(c => c.Power, "Power");
                mapper.AddMapping(c => c.IsAvailable, "IsAvailable");

                using (var dep = new
SqlTableDependency<car>(ad.sqlconnection, "Cars", mapper))
                    dep.OnChanged += Changed;

                    Console.WriteLine("Press a key to exit");

  static void Changed(object sender, RecordChangedEventArgs<car> e)
            if (e.ChangeType != ChangeType.None)
                var changedEntity = e.Entity;
                Console.WriteLine("DML operation: " + e.ChangeType);
                Console.WriteLine("ID: " + changedEntity.ID);
                Console.WriteLine("Name: " + changedEntity.Name);
                Console.WriteLine("Power: " + changedEntity.Power);
                Console.WriteLine("IsAvailable: " +


so my question is when a new record has been added to my table i get a
event triggered and will get the value which is inserted.

so now how to add the new value to existing cache say by using datastreamer
which works on list i need to add this row to end of list in existing cache.

when record is deleted i get a event and i need to delete that record from
existing cache.

when a column of table is updated say NAME column i need to update that
particular column value in cache.

can you please help me how to implement this.


View raw message