1

メッセージというモデルがあります。モデルには、Resourceと呼ばれる別のモデルのICollectionResourceSubscribersがあります。私がしようとすると

public void SaveMessage(List<int> subscribers)
    {
        Condition.Requires(model).IsNotNull();
        Message model = new Message();

        //Some assignments to initialize the model

        ICollection<Resource> res = new List<Resource>();

        foreach (var item in subscribers)
        {
            res.Add(this.ResourceService.GetResourceById(item));
        }

        model.ResourceSubscribers = res;
        Context.Messages.Add(model);
        Context.SaveChanges();
    }

「Context.Messages.Add(model);」行は、「エンティティオブジェクトはIEntityChangeTrackerの複数のインスタンスによって参照できません。」というメッセージとともにInvalidOperationExceptionをスローします。

4

3 に答える 3

2

同じコンテキストをどこでも使用する場合は、コンテキストをシングルトン インスタンスとして使用することをお勧めします。

これにより、クラスにインスタンスが 1 つだけあることが保証され、インスタンスへのグローバルなアクセス ポイントが提供されます。

これを確認してください:http://www.dofactory.com/Patterns/PatternSingleton.aspx#_self1

于 2012-03-08T13:27:22.637 に答える
0

GetResourceByIdリソースを取得するために別のコンテキストを使用していますか? その場合、それらのオブジェクトはそのコンテキストに関連付けられます。その際Context.Messages.Add、許可されていない別のコンテキストにオブジェクトを関連付けようとしました。

一緒に行われるすべての関連操作は、同じコンテキストを使用する必要があります。複数のコンテキストを持つことは、問題を引き起こします。

于 2011-10-29T07:01:56.190 に答える