You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by mrinalkamboj <mr...@gmail.com> on 2017/03/08 06:04:26 UTC
Define QuerySqlField in the config file instead of C# code
This is how I declare an entity in C#, which needs to be persisted in the
Cache:
*
[Serializable]
public class OrderEntity
{
[QuerySqlField(IsIndexed = true)]
public int OrderId { get; set; }
[QuerySqlField]
public string OrderName { get; set; }
}
*
The same entity, I want to propagate further in the application, for
processing once its fetched from the Cache, but the challenge is attribute
*[QuerySqlField]* needs Apache ignite reference, which then needs to
propagate to higher layers, which is undesirable, so only options are:
1. Either I can define these details in the config file, since they are
mandatory for Sql querying the entity.
Not sure if the same can be defined under *cacheConfiguration -
queryEntities* as follows
*
<cacheConfiguration>
<cacheConfiguration name="OrderCache" cacheMode="Replicated"
startSize="104857600">
<cacheStoreFactory type="OrderCacheStoreFactory,ApacheIgnite"/>
<queryEntities>
<queryEntity keyType="System.Int32"
valueType="OrderEntity,ApacheIgnite" keyTypeName="OrderId"
valueTypeName="OrderEntity"/>
<queryEntity keyType="System.String"
valueType="OrderEntity,ApacheIgnite" keyTypeName="OrderName"
valueTypeName="OrderEntity"/>
</queryEntities>
</cacheConfiguration>
</cacheConfiguration>
*
2. Define a separate business entity, do the explicit mapping post fetching
the Cache entity, which is the last option due to lot of extra work
--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Define-QuerySqlField-in-the-config-file-instead-of-C-code-tp11067.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.
Re: Define QuerySqlField in the config file instead of C# code
Posted by Igor Sapego <is...@gridgain.com>.
Hello,
You can do that in the config.
The proper way according to documentation [1] would be,
I believe, the following code:
<cacheConfiguration>
...
<queryEntities>
<queryEntity keyType='System.Int32'
valueType='Some.Assembly.Qualified.Path.OrderEntity, Foo.Bar'>
<fields>
<queryField name='OrderId' fieldType='System.Int32' />
<queryField name='OrderName' fieldType='System.String' />
</fields>
<indexes>
<queryIndex>
<fields>
<queryIndexField name='OrderId' />
</fields>
</queryIndex>
</indexes>
</queryEntity>
</queryEntities>
</cacheConfiguration>
P.S. I'm not quite familiar with .NET so excuse me for possible
inaccuracies.
[1] -
https://apacheignite-net.readme.io/docs/sql-queries#section-configuring-sql-indexes-using-queryentity
Best Regards,
Igor
On Wed, Mar 8, 2017 at 9:04 AM, mrinalkamboj <mr...@gmail.com>
wrote:
> This is how I declare an entity in C#, which needs to be persisted in the
> Cache:
>
> *
> [Serializable]
> public class OrderEntity
> {
> [QuerySqlField(IsIndexed = true)]
> public int OrderId { get; set; }
>
> [QuerySqlField]
> public string OrderName { get; set; }
> }
> *
>
> The same entity, I want to propagate further in the application, for
> processing once its fetched from the Cache, but the challenge is attribute
> *[QuerySqlField]* needs Apache ignite reference, which then needs to
> propagate to higher layers, which is undesirable, so only options are:
>
> 1. Either I can define these details in the config file, since they are
> mandatory for Sql querying the entity.
>
> Not sure if the same can be defined under *cacheConfiguration -
> queryEntities* as follows
>
> *
> <cacheConfiguration>
> <cacheConfiguration name="OrderCache" cacheMode="Replicated"
> startSize="104857600">
> <cacheStoreFactory type="OrderCacheStoreFactory,ApacheIgnite"/>
> <queryEntities>
> <queryEntity keyType="System.Int32"
> valueType="OrderEntity,ApacheIgnite" keyTypeName="OrderId"
> valueTypeName="OrderEntity"/>
> <queryEntity keyType="System.String"
> valueType="OrderEntity,ApacheIgnite" keyTypeName="OrderName"
> valueTypeName="OrderEntity"/>
> </queryEntities>
> </cacheConfiguration>
> </cacheConfiguration>
> *
>
> 2. Define a separate business entity, do the explicit mapping post fetching
> the Cache entity, which is the last option due to lot of extra work
>
>
>
>
>
> --
> View this message in context: http://apache-ignite-users.
> 70518.x6.nabble.com/Define-QuerySqlField-in-the-config-
> file-instead-of-C-code-tp11067.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com.
>