2012-08-24 4 views
0

예외가 수신되었습니다. IEntityChangeTracker의 여러 인스턴스에서 엔터티 개체를 참조 할 수 없습니다. 당신은 내가 코드 첫번째 & 예상 EF4.1 (대로이 태그를 추가 한C# Entity Framework - IEntityChangeTracker 문제

public class MyContext : DbContext, IDataContext 
    { 
     public MyContext (string connectionString) : 
      base(connectionString) 
     { 
     } 

     public DbSet<AssigneeModel> Assignees { get; set; } 
     public DbSet<AssetAssignmentModel> AssetAssignments { get; set; } 
} 

public class AssigneeController : Controller 
    { 
     protected MyContext db = new MyContext(ConnectionString); 

[HttpPost] 
     public ActionResult Import(SomeObjectType file) 
     { 
      AssigneeModel assignee = new AssigneeModel(); 
      assignee.FirstName = "Joe"; 
      assignee.LastName = "Smith"; 

      // Assignees have assets, and the relationship is established via an AssetAssignmentModel entity 

      AssetAssignmentModel assetAssignmentModel = new AssetAssignmentModel 
      { 
       Asset = someExistingAsset, 
       // Assignee = assignee, // Don't establish relationship here, this object will be added to the assignee collection 
      } 

      assignee.AssetAssignments.Add(assetAssignmentModel); // Manually add object to establish relationship 
      db.Assignees.Add(assignee); // Add the assignee object 
      // Exception occurs when adding the object above 
     }; 
} 

EF 버전 4.1

+0

Asset = someExistingAsset은 다른 컨텍스트에서 왔습니까? –

+0

예, 다른 방법의 서비스 호출에서 온 것입니다 ... 그러나 컨텍스트가 폐기 될 것이라고 생각합니까? – contactmatt

+1

그게 문제 야 - 그 엔티티를 다른 컨텍스트에서 분리 한 다음이 새로운 컨텍스트에 연결하거나 모든 컨텍스트에 동일한 컨텍스트를 사용해야한다. –

답변

1

문제는 Asset 개체에서 발생합니다. 다른 방법에서 문제가 발생하면이를 새 컨텍스트에 추가하기 전에 명시 적으로 해당 컨텍스트에서 분리해야합니다. 줄리가 언급했듯이, 엔티티 인스턴스는 컨텍스트를 전달할 것이지만, AssigneeModel을 작성했을 때 볼록한 점이 아니고 someExistingAsset을 검색했습니다.

+0

이 질문에 대한 귀하의 원래 코멘트가 나에게 빠른 답변/답장을 준 이후, 답변으로 이것을 표시 :) – contactmatt

1

: 내 코드는

내 상황에 맞는 클래스는 다음과 같습니다 ...과 같이 구성되어있다 dbcontext)하지만 EntityObject (edmx, objectcontext, VS2008 & VS2010의 기본 코드 gen)의 부작용처럼 보입니다.

그런 경우 EntityObject에서 파생 된 엔터티가 있고 해당 엔터티를 먼저 분리하지 않고 해당 컨텍스트를 삭제하면 해당 엔터티 인스턴스에는 여전히 해당 컨텍스트의 아티팩트가 있습니다. 따라서 다른 컨텍스트에 연결하려고하면이 메시지가 나타납니다. POCO를 사용하지 않는 경우 EF 3.5 및 EF4에 문제가있었습니다. 나는 오랫동안 그걸로 씨름해야만하지 않았지만 나는 그 찌르는 것을 기억합니다. :)