Sql server 我可以用什么来代替Include?

Sql server 我可以用什么来代替Include?,sql-server,linq,c#-4.0,entity-framework-4.1,ef-model-first,Sql Server,Linq,C# 4.0,Entity Framework 4.1,Ef Model First,除了使用Include加载实体,还有其他方法吗 我不能使用Include的原因是它似乎区分大小写。 考虑下面的例子: 我有两张桌子: 注意案例中的差异 当我想快速加载Sager的Stamkartotek时,我使用了包含,但是包含不加载Stamkartotek **更新1*** 我注意到了这种奇怪的行为——如果我使用Stamkartotek中的任何字段,它都会正确连接: 但是,如果我只检索Stam\u nr的值而不是整个对象,它会给我A而不是A: 到目前为止的研究: EF团队对此问题进

除了使用
Include
加载实体,还有其他方法吗

我不能使用
Include
的原因是它似乎区分大小写。
考虑下面的例子:
我有两张桌子:

注意案例中的差异

当我想快速加载Sager的Stamkartotek时,我使用了包含,但是包含不加载Stamkartotek

**更新1***

我注意到了这种奇怪的行为——如果我使用
Stamkartotek
中的任何字段,它都会正确连接:

但是,如果我只检索
Stam\u nr
的值而不是整个对象,它会给我
A
而不是
A

到目前为止的研究:

  • EF团队对此问题进行了讨论,但已决定不解决此问题
  • 只有先使用代码才有同样的问题-没有找到解决方案
更新2
使用
Include生成的SQL:

FROM  [dbo].[Sager] AS [Extent1]
INNER JOIN [dbo].[Stamkartotek] AS [Extent2] ON [Extent1].[Klient_Stam_nr] = [Extent2].[Stam_nr]
WHERE 'jek15' = [Extent1].[Sags_nr]
更新3
在单独的查询中加载它们,并让changetracker修复引用。它似乎也不起作用:

在这种情况下,我没有所有的信息,我认为您必须使用整数键来更新表的关系

例如,使用linq时,当您调用ToList()或First时,查询将执行到数据库。如果使用Include,则在调用某些此操作时,查询将加载数据

A或A的问题可能是排序情况,请检查您的配置一些排序忽略数据的情况

我提议:
如果要加载相关数据,请使用整型键更新正在使用的表,并使用左外联接。有时最好使用好的旧tsql(您也可以在linq中创建左外连接)。

创建一个外键周围带有较低大小写的视图,以确保读取总是将相同大小写返回EF

并使用存储过程进行插入和删除

您可以在此跟踪并投票支持要解决的问题:


而不是使用
。Include
您可以在单独的查询中加载实体。Change tracker将修复其已跟踪的相关实体的关系,如果您的查询正确,您将获得一个解决方案,从功能角度来看,该解决方案相当于使用
。Include

MSDN论坛帖子已经过时。你有没有检查他们是否在EF的更高版本中修复了它?如果他们有,你应该升级你的EF版本到修复问题的版本。不要期望修复程序被后传到以前的EF版本,尤其是旧到4的版本。1@PanagiotisKanavos我尝试使用构建模型,但问题仍然存在:|那么您可能应该将用于关系的列替换为int。问题不在
Include
,而是在关联使用文本字段时的SQL生成器中。无论如何,使用文本数据作为键是一种不常见的做法(出于您刚才遇到的原因)。或者,您可以下载EF代码(它是OSS)并修复它,如果您有时间…@PanagiotisKanavos hmmm生成的SQL看起来是正确的(更新的问题),但是结果的映射(到CLR类)这就是我认为的问题所在。@Colin你应该在你的答案中添加这个链接-它非常相关谢谢你的回答:)不幸的是,我不能,因为它不受支持:|我需要EF来进行变更跟踪,所以我也不能手动运行SQL。将表更改为使用
int
而不是
strings
是一个好主意:)但这是旧系统的核心表-我不敢更改它:sDo我还需要做任何只加载实体的事情吗?我无法让它工作-我已经更新了我的问题。(更新3)我刚试过,你是对的,它不起作用。我认为这使用了与
相同的逻辑。Include
查找关系。我认为您可以“修复”
.ObjectMaterialized
事件中的键,但它也不起作用。你不能更新数据库中的数据,使外壳相同吗?这是我们必须使用的解决方法。谢谢你的意见,我毫不怀疑这个建议会奏效——不过,我的问题是对我真正的问题的一个粗略简化。在我的程序中,有很多地方需要这样做-因此我希望有一个不那么“麻烦”的解决方案-你可以通过向我指出正式的bug关系获得赏金-谢谢:)