Структура сущности ввода строки.

Я использую транзакцию для вставки нескольких строк в несколько таблиц. Для этих строк я хотел бы добавить эти строки в порядок. При вызове SaveChanges все строки вставляются не в порядок.

Если вы не используете транзакцию и сохраняете изменения после того, как каждая вставка сохраняет порядок, но мне действительно нужна транзакция для всех записей.

Ответ 1

Вставки/обновления и удаления заказов в Entity Framework зависят от многих вещей в Entity Framework.

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

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

Порядок, который вы делаете в контексте, может противоречить этим правилам. Например, если вы это сделаете:

ctx.AddToProducts(
   new Product{
      Name = "Bovril",
      Category = new Category {Name = "Food"}
   }
);

эффект заключается в том, что Продукт сначала добавляется (в контекст), а затем, когда мы ходим по графику, мы также добавляем категорию.

то есть. порядок вставки в контексте:

Product
Category

но из-за ограничений ссылочной целостности мы должны сделать это заново, прежде чем пытаться вставить в базу данных:

Category
Product

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

Однако, если таких локальных зависимостей не существует, теоретически можно сохранить порядок. К сожалению, в настоящее время мы не отслеживаем "когда" в контекст добавлено что-то, и по соображениям эффективности мы не отслеживаем объекты, чтобы сохранить структуры, подобные спискам. В результате мы не можем сохранить порядок несвязанных вставок.

Однако мы обсуждали это совсем недавно, поэтому я очень хочу увидеть, насколько это важно для вас?

Надеюсь, что это поможет

Алекс

Командная группа Entity Framework Team

Ответ 2

Я в процессе пересечения этого моста. Я заменяю NHibernate на EF, и проблема, с которой я сталкиваюсь, заключается в том, как списки вставляются в БД. Если я добавлю элементы в список вроде этого (в коде pseduo):

list.Add(TestObject); list.Add(testObject1);

В настоящее время я не гарантированно получаю тот же порядок при запуске 'SaveChanges'. Это позор, потому что мой объект списка (т.е. Связанный список) знает порядок, в котором он был создан. Объекты, скованные вместе с использованием ссылок, ДОЛЖНЫ быть сохранены в БД в том же порядке. Не знаете, почему вы упомянули, что вы "обсуждаете" это. =)