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