如何使用EntityFramework 4保存Parent -Child?

时间:2010-11-18 15:35:10

标签: entity-framework

我正在使用EF4,我需要使用sql server 2008将父子项插入数据库。 在保存客户时,我也希望保存他们的地址。

我有如下:

public class Customer
{
  public string Name { get; set; }
  public string Surname{ get; set; }
  public List<Address> AddressList { get; set; }
}

public class Address
{
  public string StreetName { get; set; }
  public string  City { get; set; }
}

public int SaveCustomer(CustomerDto customer)
{
   //TODO NEED TO BE MODIFIED
        using (var ctx = new MyContext())
        {

           var entityCustomer = customer.ToEntityCustomer();

           var state = entityCustomer.CustomerID > 0 ? State.Modified : State.Added;

           ctx.Customers.Attach(entityCustomer);

           ctx.ObjectStateManager.ChangeObjectState(entityCustomer , EFStateUtil.GetState(state));

           var result = ctx.SaveChanges();
           return result;
        }
    }

如何修改我的代码以同时保存客户和地址。 它是一次到服务器吗?

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您还必须为每个Address对象执行此操作:

using (var ctx = new MyContext()) {
    var entityCustomer = customer.ToEntityCustomer();
    var state = entityCollectionGroup.CollectionGroupID > 0 
        ? State.Modified : State.Added;
    ctx.Customers.Attach(entityCustomer);
    ctx.ObjectStateManager.ChangeObjectState(entityCustomer, 
            EFStateUtil.GetState(state));

    foreach(address in entityCustomer.AddressList) {
        var addressState = // Your logic to figure out the state...
        ctx.ObjectStateManager.ChangeObjectState(address, addressState);    
    }

    var result = ctx.SaveChanges();
    return result;
}

是的,根据调用SaveChanges(工作单元格式),只有一次数据库保存所有内容