LINQ to SQL - вставка, приводящая к странному поведению - PullRequest
2 голосов
/ 29 марта 2010

Я пытаюсь вставить несколько вновь созданных элементов в базу данных. У меня есть сгенерированный класс LINQ2SQL под названием "Order".

Внутри порядка есть свойство с именем "OrderItems", которое также генерируется LINQ2SQL и представляет элементы этого заказа.

Пока все хорошо. У меня проблема сейчас, когда я пытаюсь добавить более одного вновь созданного OrderItem в Order.

т.е:

Order o = orderWorker.GetById( 10 ); 
for( int i=0; i < 5; ++i ) {
  OrderItem oi =new OrderItem {
                Order = o,
                Price = 100,
                ShippingPrice = 100,
                ShippingMethod = ...,
                Item = someItem
            };
  o.OrderItems.Add( oi );
}

context.SubmitChanges();

К сожалению, добавляется только одна сущность. Да, я проверил сгенерированный SQL, добавив Context.Log = Console.Out, и да, был создан только один оператор.

Есть какие-нибудь подсказки? Кстати, я знаю, что я не использую InsertOnSubmit, в документации сказано:

Вы можете явно запросить вставки по используя InsertOnSubmit. С другой стороны, LINQ to SQL может выводить вставки по поиск объектов, связанных с одним из известные объекты, которые должны быть обновлено. Например, если вы добавите Неотслеживаемый объект EntitySet (TEntity) или установить EntityRef (TEntity) для неотслеживаемого объект, вы делаете неотслеживаемый объект достижимы с помощью отслеживаемых объектов в график. Во время обработки SubmitChanges, проходы LINQ to SQL отслеживаемые объекты и обнаруживает любые достижимые постоянные объекты, которые не отслеживается. Такие объекты кандидаты на включение в базы данных.

Большое спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Проблема решена, вроде.

Проблема была в том, что я реализовал метод GetHashcode наивно. Это означало, что он возвращал надлежащие хеш-коды для уже созданных сущностей, но для вновь созданных сущностей (у которых не было назначенных идентификаторов) он возвращал тот же хеш-код.

Так что я отключил мою реализацию Equals & GetHashcode, и она работала просто отлично. Спасибо за попытку =)

0 голосов
/ 29 марта 2010

Это может звучать безумно, но мне интересно, будет ли это работать иначе, если вы удалите назначение Order = o и просто добавите его в коллекцию OrderLines. Попробуйте, по крайней мере.

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