Как сохранить Parent -Child с помощью EntityFramework 4? - PullRequest
2 голосов
/ 18 ноября 2010

Я использую 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 Ответ

4 голосов
/ 18 ноября 2010

Вы должны сделать это также для каждого объекта 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 (Unit OfРабочий шаблон)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...