I am trying to update the values of existing cache i am using IDataStremer
to insert data in the cache, I am updating complex objects so SQL is not an
option here is snappit of the code..

Can someone suggest something it will be very helpful.

 public void UpdateMetaData(CacheMetaData metaData)
        {
            var cache1 = CreateOrCheckMetaData(metaData);
            var cache = cache1.WithKeepBinary<object, IBinaryObject>();
            using (var streamer = ignite.GetDataStreamer<Guid,
IBinaryObject>(cache.Name))
            {
                streamer.RemoveData(metaData.CacheKey);

                var metaDataValueBuilder =
ignite.GetBinary().GetBuilder(IzendaMetaData).SetGuidField("CacheKey",
metaData.CacheKey)
                          .SetTimestampField("CreatedDate",
metaData.CreatedDate.ToUniversalTime())
                          .SetStringField("Schema",
metaData.FetchModal.Schema)
                          .SetGuidField("ServerType",
metaData.FetchModal.ServerType)
                          .SetStringField("Table",
metaData.FetchModal.Table)
                          .SetStringField("ConnectionString",
metaData.FetchModal.ConnectionString)
                          .SetDictionaryField("TableFields",
metaData.FetchModal.TableFields)
                          .SetStringArrayField("FieldKeys",
metaData.FetchModal.FieldKeys.ToArray());

                streamer.AddData(metaData.CacheKey,
metaDataValueBuilder.Build());
            }
        }

        private ICache<object, CacheMetaData>
CreateOrCheckMetaData(CacheMetaData metaData)
        {
            var cacheConfiguration = new CacheConfiguration() { Name =
IzendaMetaData };
            if (ignite.GetCacheNames().Contains(IzendaMetaData))
            {
                return ignite.GetCache<object,
CacheMetaData>(cacheConfiguration.Name);
            }
            else
            {
                var queryFields = new List<QueryField>();
                queryFields.Add(new QueryField("CreatedDate",
metaData.CreatedDate.GetType()));
                queryFields.Add(new QueryField("CacheKey",
metaData.CacheKey.GetType()));
                queryFields.Add(new QueryField("Table",
metaData.FetchModal.Table.GetType()));
                queryFields.Add(new QueryField("Schema",
metaData.FetchModal.Schema.GetType()));
                queryFields.Add(new QueryField("ConnectionString",
metaData.FetchModal.ConnectionString.GetType()));
                queryFields.Add(new QueryField("FieldKeys",
metaData.FetchModal.FieldKeys.GetType()));
                queryFields.Add(new QueryField("ServerType",
metaData.FetchModal.ServerType.GetType()));
                queryFields.Add(new QueryField("TableFields",
metaData.FetchModal.TableFields.GetType()));
                cacheConfiguration.QueryEntities = new[] { new QueryEntity
{ Fields = queryFields, ValueTypeName = IzendaMetaData, KeyType =
typeof(IBinaryObject) } };
                return ignite.CreateCache<object,
CacheMetaData>(cacheConfiguration);
            }
        }

Thanks,
Manan Joshi

Reply via email to