EF4一对多关系,如何刷新有孩子的对象?

时间:2011-06-27 14:38:34

标签: c# entity-framework-4.1 code-first

我制作了第一个具有这些POCO的代码模型:

    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状态?

提前感谢..

2 个答案:

答案 0 :(得分:1)

你的意思是这条线:

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

实际上是这样读的:

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

您不想删除客户的订单吗?

答案 1 :(得分:0)

这一行:

cs = db.Customers.FirstOrDefault();

您将获得表格中的第一位客户并将其分配给cs。

这一行:

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

您正在删除订单表中的第一个订单,该订单可能是也可能不是与客户cs相关的订单。

你不想做类似的事情吗?

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

显然我只是猜测关键名称