[英]Entity Framework returns wrong data for view with LEFT JOIN statement
我遇到了Entity Framework的奇怪行为。 EF生成的DbContext
对象返回与数据库中的实际数据不同的数据。
请考虑以下数据库架构:
Letter
数据:
Id Value LanguageId
------- ------- ----------
1 A 1
2 A 2
3 B 1
4 B 2
Language
数据:
Id Value
------- -------
1 English
2 Russian
我还有以下简单的LetterLanguageView
视图。 请注意,它使用LEFT JOIN
子句,因为Letter.LanguageId
可能为NULL
:
SELECT dbo.Letter.Value as Letter, dbo.Language.Value as Language
FROM dbo.Letter
LEFT JOIN dbo.Language ON dbo.Letter.LanguageId = dbo.Language.Id
这个视图的结果非常简单:
Letter Language
------- --------
A English
A Russian
B English
B Russian
但是,当我从Entity Framework使用此视图时,我得到以下结果:
如您所见, Language
属性是错误的,根本就没有俄语。
如果您想知道,这是用于读取此数据的代码段:
using (var e = new TestEntities())
{
var data = e.LetterLanguageView;
}
没有什么特别的,没有转换或对返回数据的任何修改,所以看起来问题出在实体框架本身。
你能否提出任何想法,为什么EF在这种情况下会返回错误的数据?我该如何解决这个问题?
在您的EF模型中确保LetterLanguageView将Letter和Language设置为EntityKey = true。
我过去使用的另一个技巧是添加一行Id列并使其成为PK。 这是关于它的某人(不是我)的博客
http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.