2009-04-12 5 views
0

저는 몇 주 동안 Entity Framework를 사용하고 있습니다. 좋습니다.하지만 참조 된 하위 항목 (테이블)과 함께 올바르게 새로운 행을 추가해야합니까?Entity Framework에서 참조 된 형식의 새 행 추가

나는이 절차

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(); 

을 시도하지만 오류가있어 : 나는 한 번에 모든 레코드를 추가 할 수

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

를?

고마워요.

답변

2

개체 컨텍스트 처리에 문제가있는 것으로 보입니다. 이 오류는 개체를 추가하려고 할 때 개체가 이미 개체 컨텍스트와 연관되어 있음을 나타냅니다. 여러 웹 요청을 수행하는 동안 일부 entite 살아 유지하지만 모든 웹 요청에 대한 새 개체 컨텍스트를 만드는 것으로 가정합니다. 이 작업을 수행하려면 이전 컨텍스트에서 엔티티를 분리하여 새 컨텍스트에 연결해야합니다.

비슷한 문제는 MSDN을 참조하십시오.

0

감사 danbruc,

문제는 내가 세션에 추가 할 때 내가 entityContext에서 개체를 분리하지 않는 것이였다.

이 작동 :

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; 
    } 
관련 문제