entity framework使用LEFT JOIN语句为视图返回错误的数据

我遇到了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; } 

没有什么特别的,没有转换或对返回数据的任何修改,所以看起来问题出在entity framework本身。

你能否提出任何想法,为什么EF在这种情况下会返回错误的数据?我该如何解决这个问题?

在您的EF模型中确保LetterLanguageView将Letter和Language设置为EntityKey = true。

我过去使用的另一个技巧是添加一行Id列并使其成为PK。 这是关于它的某人(不是我)的博客

http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/