8

SQL Server には、次のような非常に単純なビューがあります。ここで、Showは、 Characterテーブルを使用したLEFT JOINの結果です。

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

アプリケーションでEntity Framework を介してこのテーブルを取得する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。あなたは私たちが数週間抱えていた問題を解決してくれました。Martin の SHOW コラムで見たように、EF が一意ではない主キーを誤って "推測" し、データの重複を引き起こしたというビューがありました。ありがとう。

SQL Server の修正 - D.Mac が提案したように、ROW_NUMBER を一意の ID としてビューに追加するには: SELECT ISNULL(CAST((ROW_NUMBER() OVER (order by T.PRODUCT_NAME)) as int), 0) as ID など。

現在、Entity Framework には、ビューの ENTITY KEY として ID 列が自動的に含まれています。(EDMX ダイアグラムのビューを右クリックすると、ENTITY KEY としてフラグが立てられた ID が表示されます)

于 2014-01-15T21:36:44.100 に答える