Почему EntityFramework обновляет основной объект в отношении «главный-подробный», если измененный подробный объект? - PullRequest
2 голосов
/ 15 ноября 2011

У меня очень простая структура основных деталей в базе данных, доступ к которой осуществляется через Entity Framework с использованием следующей модели:

Entity Framework model
Модификации основного объекта отображаются с помощью хранимых процедур Вставка / Обновление / Удаление.

Объект Detail загружается и редактируется, а его главный объект также загружается в контекст, но он не изменяется. При сохранении изменений обновляются как подробности, так и основные объекты, даже если основная сущность не изменялась вообще (сущность подробностей => параметризованный оператор обновления; главная сущность => обновить вызов хранимой процедуры).

using (var context = new PlayGroundEntities())
{
    var master = context.Masters.First(m => m.MasterId == MasterAId);
    var detail = context.Details.First(d => d.DetailId == MasterADetail1Id);
    detail.DetailValue = "Detail Value";
    context.SaveChanges();
}

Это очень странно для меня, и я хотел бы избавиться от вызова sp обновления Master-сущности, если Master-сущность не изменена. Если обновления главной сущности не отображаются через хранимые процедуры (обычные ef вещи, генерируются простые параметризованные операторы вставки / обновления / удаления sql), это странное поведение не происходит.

Это просто очень простой пример. В реальном проекте у меня сложная модель, в которой возникает та же проблема, и мне бы очень хотелось от нее избавиться. К сожалению, мне действительно нужно использовать сопоставления хранимых процедур, и загрузка сущности «Мастер» также важна.

Кто-нибудь испытывал нечто подобное или сумел как-то от него избавиться? Я использую Entity Framework 4.0, выпущенную с .NET Framweork 4.0.

Заранее благодарю за помощь!

1 Ответ

0 голосов
/ 15 ноября 2011

Я не совсем уверен, но, возможно, это поможет, так что попробуйте отсоединить master, чтобы избавиться от Master master update sp:

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