【发布时间】:2012-08-20 04:37:24
【问题描述】:
我收到的异常是一个实体对象不能被多个 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 版
【问题讨论】:
-
Asset = someExistingAsset 是否来自不同的上下文?
-
是的,它来自另一个方法的服务调用......但我认为上下文会被处理掉?
-
这就是问题所在 - 您需要将该实体与另一个实体分离,然后将其附加到这个新上下文,或者对所有调用使用相同的上下文
-
我已将评论移至答案,因为我相信这对您有所帮助:)
标签: c# entity-framework entity-framework-4.1