我可以使用什么而不是包含?

时间:2013-11-19 09:59:46

标签: sql-server linq c#-4.0 entity-framework-4.1 ef-model-first

是否可以使用Include来预测加载实体?

我无法使用Include的原因是出现区分大小写。
请考虑以下示例:
我有两张桌子:

enter image description here

enter image description here

注意案例的区别。

当我想加载Sager Stamkartotek时,我使用Include,但Include未加载Stamkartotek

enter image description here

** 更新1 **

我注意到这种奇怪的行为 - 如果我使用来自Stamkartotek的任何字段,它会正确加入: enter image description here

但是,如果我只检索Stam_nr的值而不是整个对象 - 它会给我A而不是a

enter image description here

到目前为止的研究:

  • EF小组knows关于此问题 - 但已决定不解决此问题。
  • This guy只有使用代码优先才有同样的问题 - 找不到解决方案

更新2
SQL基于Include

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修复引用。它似乎也不起作用:
enter image description here

3 个答案:

答案 0 :(得分:3)

在外键周围创建一个LOWER视图,以确保读取始终将相同的大小写返回给EF。

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

您可以在此处跟踪并投票选择要解决的问题:

String comparison differences between .NET and SQL Server cause problems for resolving FK relationships in the state manager

答案 1 :(得分:1)

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

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

A或a的问题可以是整理情况,检查一下你的配置有些整理忽略了数据的情况。

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

答案 2 :(得分:1)

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