1

私はエンティティmodel.iを使用しています。SalesDetialViewという1つのビューを更新しました。

salesdetialviewには、3つのエンティティキーがあります。1.Type 2.No、3.Custmorがあります ここに画像の説明を入力してください

SQL:私はこのクエリを使用しています(私は5列だけを印刷しています)

SalesDetailViewからCustomer、Type、No、Salesperson、amountを選択します ここに画像の説明を入力してください

しかし、エンティティモデルを介して、重複する値を取得していません(いいえ)。以下の画面を参照してくださいここに画像の説明を入力してください

今、私はそれが重複した値を示していない理由を疑っています。エンティティキーに関連するもの、または何か。私がどこで間違いをしているのか教えてください。

4

2 に答える 2

1

複数の行がプライマリ列で同じ値を共有している場合、これらの最初の行のみがデータベースから取得され、これらの他の行にコピーされているように見えます。たとえば、セットに2つの列があり、最初の列がプライマリ列としてマークされている場合、

the correct result should be:

A, 1
A, 2
B, 4
B, 6
B, 7
C, 5


The actual result in code with Entity Framework would become:


A, 1
A, 1
B, 4
B, 4
B, 4
C, 5

エンティティモデルにビューを含める場合、モデルは最初のnull不可の列を主キーとして使用しているように見えます(主キーで使用されるすべての列はnull不可である必要があるため)。この問題を解決するには、主キー列が正しく選択されていることを確認してください。null値が原因で、または単に行ごとに異なる列のセットがないために正しい主キーを作成できない場合は、各行に常に一意の値を含む列をビューに追加してみてください。追加したら、エンティティモデルの主キーとして設定されていることを確認してください。

上記の例で両方の行をプライマリ列に設定すると、目的の結果が得られます。

于 2012-10-27T11:21:19.930 に答える
1

のマージオプションを変更することで解決できますObjectSet。例:

 using (TargetDBDataContext db = new TargetDBDataContext())
        {
            db.SomeView.MergeOption = System.Data.Objects.MergeOption.NoTracking;
            return db. SomeView.ToList();
        }
于 2012-10-27T14:57:59.707 に答える