0

私が受け取っている例外は、エンティティオブジェクトを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

4

2 に答える 2

1

これをEF4.1(最初にコードとdbcontextを期待した場所)としてタグ付けしましたが、EntityObject(edmx、objectcontext、VS2008とVS2010のデフォルトのコード生成)の副作用のように見えます。

その場合、(EntityObjectから派生した)エンティティがあり、最初にエンティティをデタッチせずにそのコンテキストを破棄した場合でも、エンティティインスタンスにはそのコンテキストのアーティファクトがあります。したがって、別のコンテキストにアタッチしようとすると、このメッセージが表示されます。POCOを使用していない場合、THatはEF3.5およびEF4の問題でした。私は長い間それと格闘する必要はありませんでしたが、私はその刺し傷を覚えています。:)

于 2012-08-24T15:50:25.543 に答える
1

問題はAssetオブジェクトにあります。他のメソッドから取得する場合は、この新しいコンテキストに追加する前に、そのコンテキストから明示的にデタッチする必要があります。ジュリーが述べたように、エンティティインスタンスはコンテキストを保持しますが、ポーブレムはAssigneeModel作成したものではなく、someExistingAsset取得したものにあります。

于 2012-08-24T22:12:16.547 に答える