Платформа объекта 4 Объекта с EntityState Неизменного обновления увольнения

Я использую EF 4, отображая все операции CUD для моих объектов с помощью sprocs.

У меня есть две таблицы, АДРЕС и ЧЕЛОВЕК. ЧЕЛОВЕК Может иметь многоадресный связанный с ними.

Вот код, который я выполняю:

Person person = (from p in context.People
                             where p.PersonUID == 1
                             select p).FirstOrDefault();

Address address = (from a in context.Addresses
                               where a.AddressUID == 51
                               select a).FirstOrDefault();

address.AddressLn2 = "Test";

context.SaveChanges();

Обновляемый Адрес связан с Человеком, я - retrieveing - хотя они явно не связаны всегда в коде. Когда контекст. SaveChanges () выполняется не, только делает Обновление sproc для моего объекта Адреса, запущены (как Вы, ожидал бы), но также - Обновление sproc для объекта Человека - даже при том, что Вы видите, что не было никакого изменения, внесенного в объект Человека.

Когда я проверяю EntityState обоих объектов перед контекстом. SaveChanges () звонят, я вижу, что мой объект Адреса имеет EntityState "Modified", и моя Личность enity имеет EntityState "Неизменных".

Почему Обновление sproc называемый для объекта Человека? Существует ли какая-то установка, которую я могу установить для предотвращения этого?


Я создал второй проект удостовериться, что проблемы не происходило из-за чего-то в моей текущей среде проекта.

Во-первых, я создал новую базу данных, которая содержит таблицу Order и OrderDetail. У них есть внешний ключ между ними так, чтобы Порядок мог иметь больше чем один OrderDetail, связанный с ним. Я также создал "после того, как Обновление" DB включает таблицы Order и OrderDetail, которые обновляют поле DateTime, когда запись обновляется.

Во-вторых, я создал простое приложение WPF и создал Модель Объекта ADO.NET, которая была сгенерирована от моей базы данных.

В-третьих, я добавил код к своему конструктору класса следующим образом:

public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

      MyEntities context = new MyEntities();

      Order order = (from o in context.Orders
              select o).FirstOrDefault();

      OrderDetail orderDetail = (from d in order.OrderDetails
                    select d).FirstOrDefault();

      orderDetail.Qty = 7;

      context.SaveChanges();
    }
  }

Я запустил программу, не делая никакой функции, отображающейся для моих объектов Порядка и OrderDetail. Результат был точно, что я буду ожидать видеть, запись OrderDetail обновляется, чтобы иметь Количество 7, и поле UpdateDateTime заполняется с датой и временем, обновление произошло. Никакие изменения в моем запись Порядка, что не означает обновления, не произошли.

Я затем создаю хранимые процедуры для обработки обновления таблиц Order и OrderDetail в DB. Они не делают ничего специального, просто принимают параметры для каждого столбца в таблице и затем устанавливают каждое поле, равное связанному параметру. Я затем отобразил те хранимые процедуры на свои Объекты модели с помощью Отображающихся Деталей (Объект карты к Функциям) окно.

После выполнения отображения я запустил программу. В результате я наблюдал ожидаемое поведение наблюдения обновлений таблицы OrderDetail, но кроме того таблица Order "после Обновления" триггер стреляла, и поле UdateDateTime было установлено на дату и время, обновление произошло - который я не буду ожидать.

Кто-либо знает о способе использовать хранимые процедуры для всех, Вставляют, Обновление и Удаляют операции и не имеют каскад обновлений до связанных объектов?

6
задан Benjamin 23 December 2013 в 16:09
поделиться