5

私のViewModelには、次のようなコードがあります。

public class OrderViewModel
{
    private UserOrder order;
    private DeliveryCentre deliveryCentre;

    // This is my EF Container
    private CatalogueContainer catalogue = new CatalogueContainer();

    // do some stuff...

    public void Save()
    {
        if (order == null)
        {
            order = catalogue.UserOrders.CreateObject();
        }
        // do some other stuff...

         if ((deliveryCentre == null)
            || (deliveryCentre.Id != deliveryCentreId))
        {
           deliveryCentre = catalogue.DeliveryCentres.First(centre => centre.Id == deliveryCentreId);

            //Causes a context error, not sure why...
            order.DeliveryCentre= deliveryCentre;
        }

        catalogue.SaveChanges();

    }

そのため、配送センターが新しく、注文が新しい場合、古い「2つのオブジェクト間の関係は、異なるObjectContextオブジェクトにアタッチされているため定義できません」というエラーが表示されます。それらを同じオブジェクトコンテキストにもっと属するようにするために何をする必要があるのか​​ わかりません。これは、Entity Framework の動作に関する根本的な誤解によるものだと思います。

4

2 に答える 2

3

あなたはあなたの文脈を処分していません。orderエンティティの1つ、またはエンティティdeliveryCentreへの参照を保持している古いコンテキストにアタッチされている可能性があります。メンバー変数として使用する代わりにusing、メソッド内のステートメントを使用してコンテキストを作成および破棄できます。Save

public void Save()
{
    using (var catalogue = new CatalogueContainer())
    {
        // your code...
    }
}

そして、プライベートcatalogueメンバーを削除します。

于 2012-04-25T17:13:38.723 に答える
2

解決策は、エラーメッセージに間接的にのみ関連していることが判明しました-@Slaumaは//do stuff...プレースホルダーについて質問し、私がそれらをコメントアウトすると、エラーは消えました。

そこには別の関係があり、オブジェクトをthis.Item = new Item()使用this.Item = catalogue.Items.CreateObject()するのではなく作成していたため、コンテキスト外で作成され、注文自体はローカルコンテキストから作成されましたが、注文に追加されたときに、アイテムが追加されましたが、これはどういうわけかコンテキストを汚していましたが、何らかの理由で、次の関連オブジェクトを追加したときにのみ問題として表示されました。

于 2012-04-27T10:22:50.127 に答える