2016-08-08 2 views
0

Возможно ли обновлять объекты с помощью Entity Framework, не захватывая их сначала?Обновить объект без выбора EF6 MySQL

Пример: Здесь у меня есть функция, которая предоставляет первичный ключ для поиска объектов, их вытягивает, а затем обновляет. Я хотел бы исключить необходимость сначала перенести объекты и просто запустить запрос UPDATE. Удаление необходимости генерации запроса SELECT.

public async Task<int> UpdateChecks(long? acctId, string payorname, string checkaccountnumber, string checkroutingnumber, string checkaccounttype) 
    { 
     using (var max = new Max(_max.ConnectionString)) 
     { 
      var payments = await 
       max.payments.Where(
        w => 
         w.maindatabaseid == acctId && (w.paymentstatus == "PENDING" || w.paymentstatus == "HOLD")).ToListAsync(); 

      payments.AsParallel().ForAll(payment => 
      { 
       payment.payorname = payorname; 
       payment.checkaccountnumber = checkaccountnumber; 
       payment.checkroutingnumber = checkroutingnumber; 
       payment.checkaccounttype = checkaccounttype; 
       payment.paymentmethod = "CHECK"; 
       payment.paymentstatus = "HOLD"; 
      }); 

      await max.SaveChangesAsync(); 
      return payments.Count; 
     } 
    } 
+0

Я не думаю, что это возможно без использования какой-либо сторонней библиотеки. – sstan

+0

Вы можете посмотреть: [Расширенная библиотека Entity Framework] (https://github.com/loresoft/EntityFramework.Extended). Согласно их странице, он делает именно то, что вы ищете. Но я никогда не пробовал себя с последними версиями EF6, поэтому я не знаю, насколько это хорошо работает. – sstan

+0

Duplicate: http://stackoverflow.com/questions/4218566/update-a-record-without-first-querying –

ответ

0

Вы можете использовать команду Attach() прикрепить объект вы уже знаете, существует и затем вызвать SaveChanges() будет будет вызывать соответствующий метод обновления. Вот некоторые примеры кода из MSDN article на тему:

по теме:

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" }; 

using (var context = new BloggingContext()) 
{ 
    context.Entry(existingBlog).State = EntityState.Unchanged; 

    // Do some more work... 

    context.SaveChanges(); 
} 

Обратите внимание, что это вообще EF логика, не связанные с какой-либо конкретной реализации базы данных.

+0

Возможно ли предоставить только такую ​​вещь, как первичный ключ в mock-объекте, а затем установить значение определенного поля и обновить только это значение? –

+0

@AdamReed Это, но обычно это включает в себя переопределение немного логики и изменение состояния объекта для этих свойств, как описано здесь: http://codereview.stackexchange.com/questions/37304/update-only-modified-fields- in-entity-framework. Однако, как упоминалось в комментариях, вам часто не нужно беспокоиться об этом, если нет причин только изменять эти конкретные поля. –

+0

База данных, с которой я работаю, имеет более 200 полей (к сожалению), и мне постоянно приходится обновлять только одно поле. Если я предоставляю только первичный ключ объекта в объекте, который я прикрепляю и обновляю одно поле, и задаю это состояние поля, он только обновит это конкретное поле? Или мне нужно установить любое другое поле без изменений. –

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