8

我在 SQL Server 中有一个非常简单的视图,看起来像这样,其中ShowLEFT JOIN with Character表的结果:

+---------+----------+----------------------+  
|  Name   | Surname  |         Show         |  
+---------+----------+----------------------+  
| Enoch   | Thompson | The Boardwalk Empire |  
| Anthony | Soprano  | The Sopranos         |  
| Walter  | White    | Breaking Bad         |  
+---------+----------+----------------------+  

当我在我的应用程序中通过实体框架获取此表时context.CharacterView.ToList(),结果如下所示:

+---------+----------+----------------------+  
|  Name   | Surname  |         Show         |  
+---------+----------+----------------------+  
| Enoch   | Thompson | The Boardwalk Empire |  
| Anthony | Soprano  | The Boardwalk Empire |  
| Walter  | White    | The Boardwalk Empire |  
+---------+----------+----------------------+  

但是,在 DB 中,CharacterView应该是这样。


创建视图查询

CREATE VIEW CharacterView AS
SELECT c.Name AS [Name], 
       c.Surname AS [Surname], 
       s.Name AS [Show]

FROM   [dbo].[Characters] AS c LEFT OUTER JOIN
       [dbo].[Shows] AS scen ON c.ShowId = s.Id

4

2 回答 2

8

对了,D.Mac。你解决了一个我们已经有几个星期的问题,我们刚刚开始研究它。我们有一个观点,即 EF 错误地“推断”了一个不唯一的主键,这会导致数据重复,正如您在上面 Martin 的 SHOW 列中看到的那样。谢谢。

SQL Server 修复 - 按照 D.Mac 的建议将 ROW_NUMBER 作为唯一 ID 添加到视图中:SELECT ISNULL(CAST((ROW_NUMBER() OVER (order by T.PRODUCT_NAME)) as int), 0) as ID 等。

现在实体框架自动包含 ID 列作为 VIEW 的实体键。(右键单击 EDMX 图中的视图,您应该会看到 ID 标记为 ENTITY KEY)

于 2014-01-15T21:36:44.100 回答
6

正如@balbelias.AsNoTracking()在评论中所说的那样,为我解决了这个问题。

于 2019-02-18T12:01:08.860 回答