Page 1 of 1

very strange

Posted: Fri 30 Mar 2012 19:08
by hepek
I have a table and part of the PK is column CounterID.

consider this statement:

Code: Select all

         var query = DB.CompStyles
                         .Where( q => q.DealNumber == dealNum &&
                                 q.JobNumber == jobNum &&
                                 q.CycleNumber == cycleNum);
this query returns 3 records, which is expected.

When I update entity definition and mark CounterID as NOT Primary Key, and I run the same query above and get the 3 records back, but they all point to the first record. Basically the set of 3 rows are all the same row with a same CounterID. As you can see my query is not even using the CounterID property.

The reason I tried to mark CounterID as NOT PK is to go around some other problem.
(reported here: http://www.devart.com/forums/viewtopic. ... 9997#79997)

PK for the table is: DealNumber, JobNumber, CycleNumber and CounterID

Don't you find this very strange? Thanks.

Posted: Wed 04 Apr 2012 07:45
by MariiaI
Could you please send us the model you are working with and the SQL script for creating the table "CompStyles" so that we can reproduce this issue.

Posted: Wed 04 Apr 2012 13:45
by hepek
thank you Mariia, I emaild you everything you asked for

regards

Posted: Thu 05 Apr 2012 09:43
by MariiaI
This happens because LinqConnect uses Object Identity as the way of the object identifier caching.
Every time when some row is fetched from the database, it is saved in a special cache with the help of its primary key. This row can be identified by its primary key value. If we want to query this record next time, object will be loaded from the hash-table instead of being materialized from the query result.

That's why after you have excluded CounterID from the entity primary key, you get such results. The rows that have the same values of other primary key columns are considered as the same entity, which therefore is loaded from the cache. To avoid such situations, you can either keep PK the same in the model and in the database, or remove all fields from the PK in the model.

For more information see:
http://www.devart.com/linqconnect/docs/ ... ntity.html
http://www.devart.com/linqconnect/docs/ObjectCache.html

Posted: Wed 18 Apr 2012 16:45
by hepek
Hi Mariia,

thank you for the detailed explanation.