我制作了第一个具有这些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状态?
提前感谢..
答案 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());
显然我只是猜测关键名称