2011-08-07 15 views
0

私は、PersonオブジェクトにAddressオブジェクトのリストがあるPersonとAddressオブジェクトがあるとします。情報はWCFサービスを介して公開されており、EntityFramework 4.1を使用しようとしています。EntityFramework 4.1を使用してWCF経由で子エンティティを保存する

PersonのAddressオブジェクトを更新する場合は、UpdateAddress(Address addr)というWCFメソッドが必要です。

DBContextは、PersonオブジェクトのAddressリストが存在するPersonのリストしか持たないようです。そのアドレスを更新する唯一の方法は、非効率的にする前に更新するアドレスを見つけるために、すべてのPersonをロードする必要があることを意味しているようです。

親エンティティをロードせずに更新する方法はありますか?

+0

Addre ssオブジェクトはPersonIdプロパティを持つ必要がありますか? – sternr

+0

はいPersonIdを持っています – soundslike

+0

特定のAddressオブジェクトのみを更新し、それをWCFに渡し、それに応じてPersonIdプロパティを設定することを忘れないでください。 – sternr

答えて

1

(関連エンティティとして)も、その後AddressPersonは、モデルの一部であり、PersonAddressのコレクションを持っている場合(あなたがモデルから明示的にアドレス収集を除外されない限り)モデルの一部です。

public class MyContext : DbContext 
{ 
    public DbSet<Person> People { get; set; } 
    public DbSet<Address> Addresses { get; set; } 
} 

UpdateAdressためにあなたがして使用することができます:あなたが望んでいないか、追加できない場合でも

public void UpdateAddress(Address addr) 
{ 
    using (var context = new MyContext()) 
    { 
     var addressInDb = context.Addresses.Find(addr.Id); 
     context.Entry(addressInDb).CurrentValues.SetValues(addr); 
     context.SaveChanges(); 
    } 
} 

それはあなたが単にヘルパープロパティとしてDbContextにアドレスセットを追加できることを意味しますあなたは(限り、Tがモデルのエンティティであるとして - とAddressは1でなければなりません)コンテキストのSet<T>()方法を使用することができますコンテキストにAddresses DbSet:

public void UpdateAddress(Address addr) 
{ 
    using (var context = new MyContext()) 
    { 
     var addressInDb = context.Set<Address>().Find(addr.Id); 
     context.Entry(addressInDb).CurrentValues.SetValues(addr); 
     context.SaveChanges(); 
    } 
} 
+0

ありがとうございました!私は最初にコードを実行しています。自分のDbContextをタイプすると、Addressesの別のDbSetプロパティを追加することができないことがわかりませんでした。良いヒントを使用しても設定 - もう一度ありがとう! – soundslike

関連する問題