2012-03-16 6 views
0

Я надеялся, что есть способ использовать тот же код для вставки и обновления.Entity Framework 4.0 Вставка/обновление

Например, я вставляю новый клиент, как показано ниже, используя структуру сущности.

using (var context = new GenWebEntities()) 
{ 
    clientObj = new Client(); 

    var client = new Client 
    { 
    FirstName = "John", 
    LastName = "Smith" 
    }; 
    clientObj = client; 

    context.SaveChanges(); 
} 

И если бы я мог использовать тот же код для обновления клиента, мне не пришлось бы писать двойной код.

using (var context = new GenWebEntities()) 
{ 
    clientObj = context.Clients.Single(c => c.ClientId == 31); 

    var client = new Client 
    { 
    FirstName = "Johnathan", // Updated First Name 
    LastName = "Rock" // Updated Last name 
    }; 
    clientObj = client; 

    context.SaveChanges(); 
} 

Если есть один способ кодирования и для вставки и обновления, я хотел бы знать, как, как этот метод выше просто вставляет новую запись.

** ОБНОВЛЕНИЕ ** Проблема, с которой я сталкиваюсь с этим решением, связана с отношением друг к другу.

Пример:

У меня есть другой таблицы ClientPayment, которое один ко многим. Итак, когда мне нужно обновить ClientPayment, как мне ссылаться на эту таблицу для обновления?

Для вставки я бы нормально сделать:

client.ClientPayments.Add(new ClientPayment { Type = "Credit Card", CardNumber = "4111-1111-1111-1111") 

Спасибо.

+1

Я не думаю, что существующий код делает то, что вы думаете, что он делает. Если вы хотите добавить новый объект в контекст, используйте 'context.Add (newClient)'. Если вы выберете объект из БД с помощью IQueryable 'context.Clients', вам не нужно создавать новый объект. Вы можете просто изменить свойства 'clientObj' и вызвать' SaveChanges'. Таким образом, единственное различие между «вставкой» (сохранение нового объекта) и обновлением (сохранение измененного объекта) заключается в том, что перед новым нужно выполнять «context.Clients.Add». –

ответ

0

Может быть что-то вроде этого:

private void SaveAndUpdate(int? ClientId) 
{ 
    using (var context = new GenWebEntities()) 
    { 
     Client client; 
     if(ClientId.HasValue) 
      client=context.Clients.Single(c => c.ClientId == ClientId.Value); 
     else 
      client = new Client(); 

     client.FirstName = "Johnathan"; 
     client.LastName = "Rock"; 

     if(!ClientId.HasValue) 
      context.Clients.Add(client) 

     context.SaveChanges(); 
    } 
} 
+0

Проблема, с которой я сталкиваюсь с этим решением, - это отношения от одного до многих. Пример: У меня есть другая таблица ClientPayment, которая является одной для многих. Итак, когда мне нужно обновить ClientPayment, как мне ссылаться на эту таблицу для обновления? Для вставки я бы нормально сделать: client.ClientPayments.Add (новый ClientPayment {Type = "кредитная карта", CardNumber = "4111-1111-1111-1111") Я обновил мой вопрос, так что это более читабельна. – PsychoDUCK

+0

Добавляется ли это только при создании нового. Или это должно быть обновлено? – Arion

+0

Когда я создаю нового клиента, мне нужно добавить способ оплаты. Но также мне нужно иметь возможность обновить платеж. – PsychoDUCK

Смежные вопросы