我正在使用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;
}
}
如何修改我的代码以同时保存客户和地址。 它是一次到服务器吗?
有什么建议吗?
答案 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(工作单元格式),只有一次数据库保存所有内容