0

私が2つのエンティティを持っていると考えてください-a)出版社b)本の出版社は本のコレクションであるPublishedBooksと呼ばれるナビゲーションプロパティを持っています。Publisher1がBook1とBook2の2冊の本を出版したと仮定します。Publisher1の場合、出版された本Book1を削除し、新しい出版された本(Book3)をデータベースに追加します。

Context.SaveChanges()が以下のエラーをスローします-

操作が失敗しました:1つ以上の外部キープロパティがnull許容でないため、関係を変更できませんでした。リレーションシップに変更が加えられると、関連する外部キープロパティがnull値に設定されます。外部キーがnull値をサポートしていない場合は、新しい関係を定義するか、外部キープロパティに別の非null値を割り当てるか、関連のないオブジェクトを削除する必要があります。

注:カスケード削除ルールは、データベースとコンテキストクラスに存在します。ところで、私はC#とSQLServer2005を使用しています。

4

2 に答える 2

0

あなたはこのようなことをしているように聞こえます:

Foo foo = entity.RelatedFoos.Where(f=>f.id=xyz);
entity.RelatedFoos.Remove(foo); //this is the problematic line
context.SaveChanges();

あれは; コンテキスト自体のメイン コレクションからではなく、一連の関連アイテムからエンティティを削除しています。エラーに記載されているように、上記の方法を削除すると関係のみが削除されます。オブジェクトではありませんfoo。を削除するつもりなら、これはおそらくあなたが意図したものですfoo

Foo foo = entity.RelatedFoos.Where(f=>f.id=xyz);
context.Foos.Remove(foo);
context.SaveChanges();
于 2012-06-05T12:38:07.263 に答える
0

保存する前に子オブジェクトを明示的に削除する必要があります。

Context.DeleteObject(Book1);
Context.SaveChanges();
于 2012-06-05T12:42:01.273 に答える