2011-06-27 2 views
0

は、私はこれらのPOCOを持っているコード最初のモデルを作った:EF4 1対多リレーションシップ、どのように私は子を持つオブジェクトをリフレッシュするのですか?

public class Customer 
    { 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int gender { get; set; } 
    public virtual List<Order> Orders { get; set; } 
    } 

    public class Order 
    { 
    public int OrderId { get; set; } 
    public string OrderName { get; set; } 
    } 

コンテキスト:

public class DatabaseContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Order>().HasKey(x => x.OrderId); 
     modelBuilder.Entity<Customer>().HasKey(z => z.CustomerId); 
     base.OnModelCreating(modelBuilder); 
    }  
    public DbSet<Order> Orders { get; set; } 
    public DbSet<Customer> Customers { get; set; } 
} 

は今、すべてがうまくある:

 private void button2_Click(object sender, EventArgs e) 
    { 
     DatabaseContext db = new DatabaseContext(); 
     if (cs == null) 
      cs = db.Customers.FirstOrDefault(); 
     db.Orders.Remove(db.Orders.FirstOrDefault()); 
     db.SaveChanges(); 
     MessageBox.Show(cs.Orders.Count.ToString()); 
    } 

をしかし、私はこのコードを実行すると

のカウントがcs.Orders.Countの場合、常に同じままです。間違って何イム

注:すべての注文は同じ顧客に属していますが、より複雑な状況を再現しています。

私はそのすべてのチャイルズとCSの状態を更新しないか、別の言葉で質問は?事前に

感謝..

答えて

1

あなたはこの行のためもしかして:

db.Orders.Remove(db.Orders.FirstOrDefault()); 

は、実際にこのように読むには:

db.Orders.Remove(cs.Orders.FirstOrDefault()); 

あなたは順序を削除したくありません顧客から?このラインでは

+0

私は注文からそれを削除したいが、それは彼らがすることになっている顧客の原因に反映していなし:

はあなたのような何かをしたいと思いませんつまり、私はcs.ordersをリフレッシュしたいのですが、 csの代わりにdbから削除する必要がある理由は、csへのアクセス権を持っていないことがあります。 – Stacker

+0

プラス私はあなたの行(2番目)を使用する場合、注文はdbから削除されません! – Stacker

0

cs = db.Customers.FirstOrDefault(); 

あなたがテーブルの最初の顧客を取得し、CSに割り当てています。このラインでは

:またはお客様CSに関連するためであってもなくてもよい

db.Orders.Remove(db.Orders.FirstOrDefault()); 

あなたは順序テーブルに最初の注文を削除します、。

明らか
db.Orders.Remove(db.Orders.Where(o => o.CustomerId == cs.CustomerId).FirstOrDefault()); 

私は推測していますキー名

+0

テーブルの最初の注文がその顧客のものであることを確かめてください。単に、私はすべての注文が顧客に属するように再現しています。 – Stacker

関連する問題