public void CreateCache(string connectionString, string schema, string
table, Dictionary<string, Type> fields, string[] keys)
        {
            string query = String.Format("{0} {1}.{2}", "SELECT * FROM",
schema, table);
            string cachename = CacheNameHash(connectionString, schema,
table);
            if (_dataSourceAdaptor.TestConnection(_serverType,
connectionString).Status == Framework.Constants.ConnectDBStatus.Success)
            {
                var result =
_dataSourceAdaptor.QueryMultiple<dynamic>(connectionString, query,null,60
,null).AsList();
                var cacheConfiguration = new CacheConfiguration() {
                    Name = cachename, QueryEntities = new[] {
                    new QueryEntity { TableName = "Orders" ,
ValueTypeName="Orders" , KeyTypeName="Orders", Fields=   new[]
                            {
                                new QueryField("OrderID", typeof(int)),
                                new QueryField("EmployeeID", typeof(int)),
                                new QueryField("CustomerID", typeof(int)),
                            }, }

                } };
                var cache = ignite.GetOrCreateCache<IBinaryObject,
IBinaryObject>(cacheConfiguration).WithKeepBinary<IBinaryObject,
IBinaryObject>();
                using (var streamer = ignite.GetDataStreamer<IBinaryObject,
IBinaryObject>(cache.Name))
                {
                    foreach (var item in result)
                    {
                        var dataRow = (IDictionary<string, object>)item;
                        IBinaryObjectBuilder keyBuilder =
ignite.GetBinary().GetBuilder(table);
                        IBinaryObjectBuilder valueBuilder =
ignite.GetBinary().GetBuilder(table);
                        SetBuiderFields(fields, keys, dataRow,table,out
keyBuilder);
                        SetBuiderFields(fields, new
List<string>(fields.Keys).ToArray(), dataRow, table, out valueBuilder);

streamer.AddData(keyBuilder.Build(),valueBuilder.Build());
                    }
                }
                var queryreults = cache.Query(new SqlFieldsQuery("select
OrderID from Orders"));
            }

        }

        private void SetBuiderFields(Dictionary<string, Type> fields,
string[] keys, IDictionary<string, object> dataRow,
                                    string tablename ,out
IBinaryObjectBuilder builder)
        {
            builder = ignite.GetBinary().GetBuilder(tablename);
            foreach (var field in keys)
            {
                switch (Type.GetTypeCode(fields[field]))
                {
                    case TypeCode.Byte:
                        builder.SetByteField(field, (byte)dataRow[field]);
                        break;
                    case TypeCode.String:
                        builder.SetStringField(field,
(string)dataRow[field]);
                        break;
                    case TypeCode.Int16:
                        builder.SetShortField(field, (Int16)dataRow[field]);
                        break;
                    case TypeCode.Int32:
                        builder.SetIntField(field, (Int32)dataRow[field]);
                        break;
                    case TypeCode.Int64:
                        builder.SetLongField(field, (long)dataRow[field]);
                        break;
                    case TypeCode.Decimal:
                        builder.SetDecimalField(field,
(decimal)dataRow[field]);
                        break;
                    case TypeCode.Double:
                        builder.SetDoubleField(field,
(double)dataRow[field]);
                        break;
                    default:
                        builder.SetField(field, dataRow[field]);
                        break;
                }
            }
        }

On Fri, Nov 15, 2019 at 2:41 PM Pavel Tupitsyn <[email protected]> wrote:

> Can you please attach full code as text? Can't run a screenshot :)
>
> On Fri, Nov 15, 2019 at 10:35 PM Manan Joshi <[email protected]>
> wrote:
>
>> Some more help :)
>>
>>
>> [image: image.png]
>>
>> I am seeing cache are stored fine in key and in value but when run the
>> query it throws exception on table not found. Can you help me out what i am
>> missing?
>>
>> On Fri, Nov 15, 2019 at 12:32 PM Pavel Tupitsyn <[email protected]>
>> wrote:
>>
>>> Yes, you can use IBinaryObject as a key. Yes, SQL will work too.
>>>
>>> On Fri, Nov 15, 2019 at 7:51 PM Manan Joshi <[email protected]>
>>> wrote:
>>>
>>>> Paval,
>>>>
>>>> Thanks you for response.
>>>>
>>>> I have trying to insert insert data using datastreamer into ignite ,
>>>> Can you tell me what is the best practice to creating key into ignite.
>>>>
>>>> if i want to create multiple columns of db as key should i use
>>>> Ibinaryobject to store as object ? will ignite sql engine understand the
>>>> indexes if key is in IBinaryObject.
>>>>
>>>> Thanks
>>>> Manan Joshi
>>>>
>>>> On Fri, Nov 15, 2019 at 11:00 AM Pavel Tupitsyn <[email protected]>
>>>> wrote:
>>>>
>>>>> When using `dynamic` with Dapper, underlying objects are of type
>>>>> DapperRow, which is also IDictionary<string, object>,
>>>>> which is easy to convert to BinaryObject. Here is a full example with
>>>>> Dapper query:
>>>>>
>>>>> var dapperQuery = conn.Query("SELECT * FROM Persons");
>>>>> foreach (IDictionary<string, object> row in dapperQuery)
>>>>> {
>>>>>     var builder = ignite.GetBinary().GetBuilder("YourEntityNameHere");
>>>>>     foreach (var pair in row)
>>>>>     {
>>>>>         builder.SetField(pair.Key, pair.Value);
>>>>>     }
>>>>>
>>>>>     var binaryObject = builder.Build();
>>>>>     Console.WriteLine(binaryObject);
>>>>> }
>>>>>
>>>>>
>>>>> On Fri, Nov 15, 2019 at 5:20 PM Ilya Kasnacheev <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hello!
>>>>>>
>>>>>> You can try using ignite.binary().ToBinary(obj).
>>>>>>
>>>>>> However, in your case, it makes sense to avoid the intermediate
>>>>>> object stage directly and produce BinaryObjects from input data using
>>>>>> builder.
>>>>>>
>>>>>> Regards,
>>>>>> --
>>>>>> Ilya Kasnacheev
>>>>>>
>>>>>>
>>>>>> пт, 15 нояб. 2019 г. в 17:15, Manan Joshi <[email protected]>:
>>>>>>
>>>>>>> I am reading the data using dapper from the database i am not sure
>>>>>>> how to convert fromSystem.Collections.Generic.IEnumbrable<dynamic>
>>>>>>> to Apache.Ignite.Core.Binary.IBinaryObject.
>>>>>>>
>>>>>>> Thanks
>>>>>>> Manan Joshi
>>>>>>>
>>>>>>> On Fri, Nov 15, 2019 at 8:46 AM Alexandr Shapkin <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> You can also refer to the BinaryModeExample.cs
>>>>>>>> <https://github.com/apache/ignite/blob/master/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/BinaryModeExample.cs>
>>>>>>>> example and the docs [1]
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> [1] -
>>>>>>>> https://apacheignite-net.readme.io/docs/binary-mode#section-creating-binary-objects
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> *From: *Ilya Kasnacheev <[email protected]>
>>>>>>>> *Sent: *Friday, November 15, 2019 4:13 PM
>>>>>>>> *To: *[email protected]
>>>>>>>> *Subject: *Re: Store objects as IBinaryobject in cadche
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hello!
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> You can use BinaryObjectBuilder:
>>>>>>>>
>>>>>>>>
>>>>>>>> https://apacheignite.readme.io/docs/binary-marshaller#section-modifying-binary-objects-using-binaryobjectbuilder
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> However, each variation of its composition is stored in schema
>>>>>>>> cache, which means you should not have too many of those.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> It is recommended to use Map to store all variable/non-essential
>>>>>>>> fields if you have a lot of them.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>> Ilya Kasnacheev
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> пт, 15 нояб. 2019 г. в 16:08, Manan Joshi <[email protected]>:
>>>>>>>>
>>>>>>>> I would like to store any time of object into cache as
>>>>>>>> IBinaryobject, so i can store cache stored in loosely bind with 
>>>>>>>> object. I
>>>>>>>> am working with Ignite .Net. Can someone please suggest something.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I need something like
>>>>>>>>
>>>>>>>> MyObject obj = new MyObject();
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>  obj.setFieldA("A");
>>>>>>>>
>>>>>>>>  obj.setFieldB(123);
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>  BinaryObject binaryObj = Ignition.ignite().binary().toBinary(obj);
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>> Manan Joshi
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>

Reply via email to