1

Addressテーブルに外部キーが設定されたnull許容のAddressIdを含むPersonテーブルがあります。したがって、ゼロ..1対多。

EFとObjectContextを使用して、person.Addressを呼び出して、個人のAddressオブジェクトにアクセスできます。きちんとした!

このかなり単純なコードを見て、私の問題をお話しします。

var _db = new DataContext();
Person person = _db.getThatOneGuy();

//some changes are done to the person object
person.FirstName = "Harry";

//If there's no address I want to make one
if(person.Address == null)
person.Address = new Address();

person.Address.StreetOne = "blah";
person.Address.StreetTwo = "blah";

//I decide I don't actually want this new address
person.Address = null;

_db.SaveChanges();

SaveChanges()を呼び出すと、SQL UPDATE(firstname ='Harry')が生成されますが、これはすばらしいですが、新しいアドレス(blah、blah)を追加しようとするsqlINSERTステートメントも生成されます。(SQLプロファイラーで生成されたSQLをチェックしたのでわかります)null許容ではないStateIdのようなフィールドがあるためエラーになりますが、そのアドレスを追加しようとさえしたくありません(停止しようとしたのはそれを作成することでした) null)助けてください。

注:以前は、person.Addresses.Add(addressObj)、次にperson.Addresses.Remove(addressObj)を実行できるコレクション(多対多の関係)で成功しており、ObjectContextは挿入を実行しないことを認識しています。多くのアドレス状況にこの0..1を処理する方法がわからない。

ありがとう。

4

1 に答える 1

0

問題は、プロパティをnullに設定しても、コンテキストからインスタンスがAddress削除されないことです。インスタンスとインスタンスAddressの間に関係がないことをコンテキストに通知するだけです。それでも、コンテキストからインスタンスを削除する必要があります。これを試して:PersonAddressAddress

_db.Detach(person.Address);
_db.SaveChanges();

また:

var address = person.Address; 
person.Address = null;
_db.Detach(address);
_db.SaveChanges();
于 2012-09-13T08:56:48.107 に答える