why i got same result

Discussion of open issues, suggestions and bugs regarding LinqConnect – Devart's LINQ to SQL compatible ORM
Post Reply
mmp7uk
Posts: 5
Joined: Mon 26 Sep 2011 16:17

why i got same result

Post by mmp7uk » Mon 26 Sep 2011 16:49

use ver3 / mysql 5.5.12 / Win7 x64 / C#

I found I always got same result

my test code is.

Code: Select all

            

Abc.myDataContext con = new Abc.myDataContext(); 
con.Log = Console.Out;

var a = con.Monos.SingleOrDefault(x => x.UrlHash == "3D6B6976172C656F3EE3EF45B1442776");
Console.WriteLine(a.Title);

var b = con.Monos.SingleOrDefault(x => x.UrlHash =="314198768635805D5F979D0B57B5881C");
Console.WriteLine(b.Title);

Console.ReadLine();
but I got this:

Code: Select all

SELECT t1.Id, t1.Url, t1.CategoryId, t1.Title, t1.Description, t1.Tosion, t1.Cre
atedAt, t1.ModifiedAt, t1.UrlHash, t1.GoodMember, t1.BadMember, t1.Favicon, t1.D
omain, t1.GoodPoint, t1.BadPoint, t1.UrlType, t1.Tags, t1.Thumbnail, t1.Summary,
 t1.ShortenUrl, t1.Views, t1.R18
FROM abida.mono t1
WHERE t1.UrlHash = :p0
-- p0: Input VarChar (Size = 32; DbType = AnsiString) [3D6B6976172C656F3EE3EF45B
1442776]
-- Context: Devart.Data.MySql.Linq.Provider.MySqlDataProvider Model: an Build: 3
.0.4.0

This is title A
SELECT t1.Id, t1.Url, t1.CategoryId, t1.Title, t1.Description, t1.Tosion, t1.Cre
atedAt, t1.ModifiedAt, t1.UrlHash, t1.GoodMember, t1.BadMember, t1.Favicon, t1.D
omain, t1.GoodPoint, t1.BadPoint, t1.UrlType, t1.Tags, t1.Thumbnail, t1.Summary,
 t1.ShortenUrl, t1.Views, t1.R18
FROM abida.mono t1
WHERE t1.UrlHash = :p0
-- p0: Input VarChar (Size = 32; DbType = AnsiString) [3D6B6976172C656F3EE3EF45B
1442776]
-- Context: Devart.Data.MySql.Linq.Provider.MySqlDataProvider Model: an Build: 3
.0.4.0

This is title A
I mean i passed 2 different ids:

3D6B6976172C656F3EE3EF45B1442776
and
314198768635805D5F979D0B57B5881C

but the linqConnect generated two same query with first id "3D6B6976172C656F3EE3EF45B1442776" twice, so i got same results, why?

the id is Unique column in the table.
Last edited by mmp7uk on Tue 27 Sep 2011 06:41, edited 1 time in total.

mmp7uk
Posts: 5
Joined: Mon 26 Sep 2011 16:17

more sample

Post by mmp7uk » Tue 27 Sep 2011 02:57

I test again.

this is my test table

Code: Select all

CREATE TABLE `testtable` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(45) NOT NULL,
  PRIMARY KEY (`Id`),
  UNIQUE KEY `Id_UNIQUE` (`Id`)
) ENGINE=InnoDB
this is my linq syntax:

Code: Select all

            TestContext.TestDataContext con = new TestContext.TestDataContext();
            con.Log = Console.Out;

            var a = con.Testtables.FirstOrDefault(x => x.Name == "Name-A");
            var b = con.Testtables.FirstOrDefault(x => x.Name == "Name-B");
            var c = con.Testtables.FirstOrDefault(x => x.Name == "News");
            var d = con.Testtables.FirstOrDefault(x => x.Name == "XYZ");
and i got this results:

Code: Select all

SELECT t1.Id, t1.Name
FROM test.testtable t1
WHERE t1.Name = :p0 LIMIT 1
-- p0: Input VarChar (Size = 6; DbType = AnsiString) [Name-A]
-- Context: Devart.Data.MySql.Linq.Provider.MySqlDataProvider Model: an Build: 3
.0.4.0

SELECT t1.Id, t1.Name
FROM test.testtable t1
WHERE t1.Name = :p0 LIMIT 1
-- p0: Input VarChar (Size = 6; DbType = AnsiString) [Name-A]
-- Context: Devart.Data.MySql.Linq.Provider.MySqlDataProvider Model: an Build: 3
.0.4.0

SELECT t1.Id, t1.Name
FROM test.testtable t1
WHERE t1.Name = :p0 LIMIT 1
-- p0: Input VarChar (Size = 6; DbType = AnsiString) [Name-A]
-- Context: Devart.Data.MySql.Linq.Provider.MySqlDataProvider Model: an Build: 3
.0.4.0

SELECT t1.Id, t1.Name
FROM test.testtable t1
WHERE t1.Name = :p0 LIMIT 1
-- p0: Input VarChar (Size = 3; DbType = AnsiString) [XYZ]
-- Context: Devart.Data.MySql.Linq.Provider.MySqlDataProvider Model: an Build: 3
.0.4.0
so why I got same [Name-A] 3 times and one [XYZ] query?

Zero-G.
Posts: 398
Joined: Sat 09 Dec 2006 12:20

Post by Zero-G. » Tue 27 Sep 2011 06:08

Hey
I am not a devart guy, but maybe, I have a workaround for you.
In the generated template, of the datacontext, you can find a definition of precompiled query.
It should look like this (it is translated from the VB version)

Code: Select all

public static Devart.Data.Linq.CompiledQueryCache compiledQueryCache = Devart.Data.Linq.CompiledQueryCache.RegisterDataContext(typeof(DataContext));

uncomment this line and try again. - There have been a few problems with the precompiled queries in the past, but your problem was solved long time ago, when you are really using v3.

mmp7uk
Posts: 5
Joined: Mon 26 Sep 2011 16:17

Thanks

Post by mmp7uk » Wed 28 Sep 2011 09:51

Thanks! Zero-G.

The problem solved after I uncomment the line.

but I am really using v3

Image

Zero-G. wrote:Hey
I am not a devart guy, but maybe, I have a workaround for you.
In the generated template, of the datacontext, you can find a definition of precompiled query.
It should look like this (it is translated from the VB version)

Code: Select all

public static Devart.Data.Linq.CompiledQueryCache compiledQueryCache = Devart.Data.Linq.CompiledQueryCache.RegisterDataContext(typeof(DataContext));

uncomment this line and try again. - There have been a few problems with the precompiled queries in the past, but your problem was solved long time ago, when you are really using v3.

StanislavK
Devart Team
Posts: 1710
Joined: Thu 03 Dec 2009 10:48

Post by StanislavK » Wed 28 Sep 2011 13:47

The problem is that the compiled query cache stores the query with the parameters, and the 3.0.4 version has a bug related to distinguishing two queries, whose only difference is in the value of a parameter. This bug is already fixed, the fix will be available in the nearest build which we plan to release in several days.

Post Reply