0

私は EF Code First を初めて使用し、いくつかの問題を抱えています。

ここに私のモデル

public class User 
{
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual Address Address { get; set; }
}

public class Address 
{
    public string Id { get; set; }
    public string Street { get; set; }
    public string Nr { get; set; }
}

私が欲しいのは、次のコードを書く場合です:

user.Address = null; 

関連するアドレス (データベースのレコード) を削除する必要がありますが、そうではありません! Users テーブルの外部キーのみを削除します。また、新しいアドレスを割り当てると:

user.Address = new Address() { ... }; 

データベースに 2 番目のレコードが作成されるのはなぜですか?

私が欲しい:

  1. user.Addressデータベース レコードに null を割り当てる場合は、削除する必要があります

  2. 新しい Address オブジェクトを割り当てるとuser.Address、既存のレコード データが新しいものに置き換えられます。

どうすればこれを解決できますか?

4

1 に答える 1

1

エンティティを削除する必要がある場合は、エンティティを削除済みとしてマークする必要があります。ナビゲーション プロパティを null に設定しても、関連するエンティティは削除されません。関連するエンティティを指す多くのナビゲーション プロパティ (さまざまなエンティティ) が存在する可能性があり、記述しているシナリオではそれらすべてが影響を受けることに注意してください。新しい Address を作成すると、新しいエンティティが作成されます。次に、ナビゲーション プロパティを新しく作成したプロパティに設定すると、古い関係が壊れて新しい関係が作成されます。作成したエンティティはデータベースにないため、追加されます。古いエンティティも削除していないため、データベースから削除されませんでした。エンティティのプロパティ値を変更したいだけの場合は、プロパティを新しい値に設定し、SaveChanges を呼び出します。これにより、データベース内のデータが更新されます。

于 2012-10-14T20:36:48.577 に答える