Мы пытаемся разработать нашего собственного поставщика EF для наших устаревших API. Нам удалось заставить операцию «GET / POST» работать успешно.
Однако для операции «PUT / MERGE» метод «CreateDbCommandDefinition» (из реализации DbProviderServices) запускается дважды. Один с "DbQueryCommandTree", а другой с "DbUpdateCommandTree".
Я понимаю, что необходимо обновить объект до его обновления (я думаю, для отслеживания изменений). В нашем случае мне не нужно извлекать информацию об объектах до обновления. Я просто хочу вызвать наши устаревшие API с объектом, отправленным на обновление. Как мы можем строго просить его не выполнять работу «DbQueryCommandTree» (и выполнять только работу «DbUpdateCommandTree»), когда я работаю с операциями «PUT / MERGE».
Код клиента выглядит примерно так, как показано ниже:
public void CustomerUpdateTest()
{
try
{
Ctxt.MergeOption = MergeOption.NoTracking;
var oNewCus = new Customer()
{
MasterCustomerId = "1001",
SubCustomerId = "0",
FirstName = "abc",
LastName = "123"
};
Ctxt.AttachTo("Customers", oNewCus);
Ctxt.UpdateObject(oNewCus);
//Ctxt.SaveChanges();
Ctxt.SaveChanges(SaveChangesOptions.ReplaceOnUpdate);
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}