2013-04-02 1 views
1

Я хочу, чтобы вставить мастер-деталь со следующей структурой:Вставьте мастер-Detail с помощью LINQ

Каждая продажа имеет идентификатор, дата и клиента, сотрудника и SaleDetail. Каждая информация о продажах имеет количество штук и цену и, конечно, ссылку на ее владельца и какой продукт.

Я пробовал следующий код, но я не могу заставить его работать:

private void GenerarNota() 
{ 
    EntityCollection<SalesDetail> details = new EntityCollection<SalesDetail>(); 

    foreach (ListItem item in _productList) 
    { 
     SalesDetail detail = new SalesDetail(); 
     detail.Product = db.Product.FirstOrDefault(p => p.Id == item.Id); 
     detail.Pieces = item.Pieces; 
     detail.Price = item.Price; 

     details.Add(detail); 
    } 

    Sale sale = new Sale 
    { 
     Client = (Client)txtCliente.Item, 
     Employee = (Employee)txtEmp.Item, 
     SalesDetail = details 
    }; 

    db.AddToSale(sale); 
    db.SaveChanges(); 
} 

Исключение я получил:

Объект не может быть добавлен в EntityCollection или EntityReference. Объект, прикрепленный к объекту ObjectContext, не может быть добавлен в EntityCollection или EntityReference, который не является , связанным с исходным объектом.

Я делаю что-то неправильно? Я читал о прикреплении и удалении объектов, но после того, как я попробовал, у меня было нарушение ограничений FK.

Не могли бы вы рассказать мне, что я делаю неправильно, или если это другой способ сделать это? Я очень новичок в LINQ, я мог бы прекрасно это сделать в чистом SQL, но я хотел узнать об этом.

+0

Итак, где же происходит «venta»? – lexeRoy

+0

Приношу свои извинения. Мой основной язык - испанский, поэтому большинство идентификаторов были на испанском языке. Я перевел их, но забыл последнюю часть. – Areks

ответ

0

detail.Product все еще ассоциируется с db. Цены и Pieces могут быть связаны с ним. Система очень строгая, гарантируя, что каждый объект может быть связан только с одним объектным контекстом (ваш db) или полностью отсоединен (ваш EntityCollection <>).

Либо ваши данные EntityCollection должны быть связаны с db (не знаю, как это сделать), либо все ваши объекты должны быть должным образом отделены, прежде чем они будут привязаны к деталям.

Честно говоря, я просто изменил порядок вещей - создайте сначала первую и добавьте ее, а затем начните вставлять вещи в Sale.SalesDetail.

+0

Что делать, если вы сохранили основную запись, и при сохранении деталей произошла ошибка, а затем у вас неправильная главная запись в заголовке без каких-либо подробностей – Adeem

Смежные вопросы