4

を反映していない場合我々はそれにselect文を持っているストアドプロシージャがあります:T内で実行されると、この2つのレコードを生成しEntity Frameworkの4に戻りマングルされた混乱基礎となるデータは、エンティティの主キー

select convert(int, c.ID) as ID, 
     convert(nvarchar(255), c.name) as name, 
     convert(varchar(32), a.state) as state 
from customer c join address a on 
     c.addressid = a.ID 
where c.name like @custNameSpec 

を-SQLウィンドウ:関数インポートとしてEntity Frameworkの4において実行される場合

ID Name State 
1 Robert PA 
2 Rob  VA 

、これは、2つのレコードを返したが、最初のレコードが重複している:

ID Name State 
1 Robert PA 
1 Robert PA 

関数のインポートとインポートされた関数を削除し、再作成しました。また、上記のSQL convert()ステートメントを追加して、Entity Frameworkがサーバーから戻ってくるデータ型を認識できるようにしました。

私たちはそれを修正するために何ができますか?そのような重複の原因は何ですか?

当社のテストが含まれます:

var myresult3 = myUOW.DC.GetAdDir(todaysdate: null, store_nbr: 14, 
            adtype: null).ToList(); 
var myresult4 = DB.GetAdDir(todaysdate: null, store_nbr: 14, 
          adtype: null).ToList(); 

どちらも同じ間違った結果を返します。

exec [dbo].[GetCust] @todaysdate=NULL,@custNameSpec='Rob',@adtype=NULL 

EDIT:SQLプロファイラは、この呼び出しを示し

どうやらを、ビジネスルールが変更されました。 Entity Frameworkから生成されたPOCOにはプライマリキーが正しく設定されていないため、正しい数のフィールドが返されましたが、POCOの主キーフィールドに基づいてすべての重複を同じにすることによって重複が削除されました。

MergeOptionこれがなぜ起こるのかを説明するかもしれない他の遠隔関連の質問で参照される。

答えて

4

プライマリキーのようにエンティティに一意の制限を作成し、そのデータから重複がある場合、Entity Frameworkは見つかった各重複のすべてのフィールドに対して最初の重複レコードを繰り返します。

つまり、基になるデータがプライマリキーを正しく反映していない場合、Entity Frameworkは乱雑な混乱を返します。

関連する問題