说我有一个表在一个名为testdb的一个名为Table 1表中包含两列我可以让EntityFramework 4.1返回返回考虑DbSet.Local和数据库中的数据的结果的查询吗?
ID
Name
在这个表数据库中,有两排,
ID 1 and Name 'Row1'
ID 2 and Name 'Row2'
如果这是我的代码
var currObj = Table1.Where(o => o.Name.Contains("Row1")).FirstOrDefault();
currObj.Name = "Row1a";
var a = Table1.Where(o => o.Name.Contains("Row1a")).FirstOrDefault();
var b = Table1.Local.Where(o => o.Name.Contains("Row1a")).FirstOrDefault();
a将返回null,而b将返回一个值。
如果我这样做,虽然
var c = Table1.Where(o => o.Name.Contains("Row2")).FirstOrDefault();
var d = Table1.Local.Where(o => o.Name.Contains("Row2")).FirstOrDefault();
则c将返回的东西,但d不会。
对我来说,这看起来很不直观,因为数据可能有两个不同的地方。对于我所做的每个查询,我必须查看数据库和Local对象并将它们合并在一起。就像它在本地对象中发生变化一样,我必须考虑到这一点。实体框架是否有任何对此的机制,它会同时考虑数据库中的数据和本地数据?
所以,如果我去
var e = Table1.AMagicSolution.Where(o => o.Name.Contains("Row1a")).FirstOrDefault();
var f = Table1.AMagicSolution.Where(o => o.Name.Contains("Row2")).FirstOrDefault();
那么E和F两个都会返回(从本地对象f,从数据库和e)东西
谢谢,这是比其他解决方案稍好一点,虽然性能不是一个问题在这个时候。我只想说这个解决方案,但我希望它更通用。我需要为每个查询的每个类编写一个特定的方法。如果你可以通过一个DbSet作为表,并且你想在其上运行的linq查询作为一个func,那将是非常好的。但我已经玩过它了,可悲的是,我不认为这是可能的。 –
Diskdrive
我猜上面的代码应该是:if(item == null)而不是if(item!= null) – NoChance