2009-04-12 6 views
0

Ich arbeite nur wenige Wochen mit Entity Framework. Es ist großartig, aber wie soll ich eine neue Zeile mit referenzierten Unterelementen (Tabellen) hinzufügen?Neue Zeile mit referenzierten Typen in Entity Framework hinzufügen

habe ich versucht, dieses Verfahren

CMS.ShopOrder order = new CMS.ShopOrder(); 

    order.CreatedOn = DateTime.Now; 

    foreach (var item in CMS.CurrentSession.Cart.Items) 
    {   
     order.ShopOrderItems.Add(item); 
    } 

    db.AddToShopOrder(order);  

    int selT = FormatHelper.GetInt32(ddTransport.SelectedValue); 
    int selP = FormatHelper.GetInt32(ddTransport.SelectedValue);  

    order.Transportation = db.Transportation.Where(t => t.Id == selT).FirstOrDefault(); 
    order.Payment = db.Payment.Where(p => p.Id == selP).FirstOrDefault(); 
    order.Customer = db.Customer.Where(c=>c.Id == CMS.CurrentSession.Customer.Id).FirstOrDefault(); 

    db.SaveChanges(); 

aber ich habe Fehler:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker. Line 492: base.AddObject("ShopOrder", shopOrder);

Kann ich auf einmal alle diese Datensätze hinzufügen?

Vielen Dank.

Antwort

2

Es scheint, dass Sie ein Problem mit der Objektkontextbehandlung haben. Der Fehler weist darauf hin, dass die Entität bereits einem Objektkontext zugeordnet ist, wenn Sie versuchen, sie hinzuzufügen. Ich gehe davon aus, dass Sie bei der Durchführung mehrerer Web-Anfragen einige Eigenschaften beibehalten, aber für jede Web-Anfrage einen neuen Objektkontext erstellen. Sie müssen die Entitäten vom alten Kontext trennen und sie an den neuen binden, damit das funktioniert.

Siehe die MSDN für ein ähnliches Problem.

0

Dank danbruc,

das Problem war, dass ich das Objekt von EntityContext nicht gelöst, wenn ich es zu Sitzung hinzugefügt wurde.

Dies funktioniert:

public CMS.ProductVariant GetProductVariantById(int id) 
    { 
     ProductVariant pv = null; 
     if (id > 0) 
     { 
      using (db = new CmsEntity()) 
      { 
       pv = db.ProductVariant.Where(v => v.Id == id).FirstOrDefault(); 
       db.Detach(pv); 
      } 
     } 
     return pv; 
    } 
Verwandte Themen