0

レコードを挿入するときに手動で外部キー値を割り当てることは可能ですか?

TransactionScope や同様の構造を使用したくありません。しかし、SaveChanges() を呼び出す前に、foreignkey 値を設定したい

例えば:

EntityX x = new EntityX();
x.Name = "test";
ctx.AddToEntityX(x);

EntityY y = new EntityY();
y.Name = "Test";
y.EntityXID = x.ID; // <--- I want this. Not using a navigation property, but its 0.
ctx.AddToEntityY(y);

ctx.SaveChanges();
4

3 に答える 3

0

はい、それは可能ですが、EntityReferenceを介して割り当てる必要がある多くの問題があります。

y.EntityXReference.EntityKey = new EntityKey("Enitites.YSet", "Id", x.id);

パラメーターの詳細については、EntityKeyコンストラクターを参照してください。

その他の参照については、ヒント7-.NET3.5SP1で外部キープロパティを偽造する方法を参照してください。

于 2011-04-20T19:59:55.203 に答える
0

あなたの例でナビゲーション プロパティを使用しても問題はありません。SaveChangesまた、トランザクションを内部で使用するため、トランザクション スコープは必要ありません。

理論的には、概念モデル (EDMX デザイナー) のすべての関連付けを削除し、EDMX ファイルの SSDL 部分のすべての関連付けを手動で削除してから、FK を新しいスカラー プロパティにマップすると、それができるはずです。しかし、EF を大幅に劣化させるので、EF を使用せずに ADO.NET または Linq-to-sql に戻す必要があります。さらに、EDMX の SSDL 部分に触れると、データベースからの更新を使用できなくなります。

于 2011-04-20T20:05:26.463 に答える
0

新しいエンティティを作成すると、永続化されるまで ID がありません。次に、DB からそれを取得して、アイデアを得る必要があります。この例では、ナビゲーション プロパティを使用することが間違いなく最良の選択です。したがって、代わりに:

y.EntityXID = x.ID;

あなたが使うだろう

y.EntityX = x;
于 2011-05-13T15:55:26.953 に答える