14

私はエンティティフレームワークに非常に慣れていないので、ご容赦ください...

異なるコンテキストの 2 つのオブジェクトを関連付けるにはどうすればよいですか?

以下の例では、次の例外がスローされます。

System.InvalidOperationException: 2 つのオブジェクトが異なる ObjectContext オブジェクトに関連付けられているため、2 つのオブジェクト間の関係を定義できません。

void MyFunction()
{
    using (TCPSEntities model = new TCPSEntities())
    {
        EmployeeRoles er = model.EmployeeRoles.First(p=>p.EmployeeId == 123);
        er.Roles = GetDefaultRole();
        model.SaveChanges();
     }
}

private static Roles GetDefaultRole()
{
    Roles r = null;
    using (TCPSEntities model = new TCPSEntities())
    {
        r = model.Roles.First(p => p.RoleId == 1);
    }
    return r;
}

ASP.NET アプリケーションで EF を使用しているため、1 つのコンテキストを使用することはできません。

4

4 に答える 4

11

同じコンテキストを使用するか(コンテキストをgetdefaultroleメソッドに渡すことができます)、関係を再考してエンティティを拡張する必要があります。

編集:これを追加したかったのは、提供された例でした。asp.netを使用するには、コンテキストと関係の設計を完全に考える必要があります。

単にコンテキストを渡すことができます。IE:

void MyFunction()
{
    using (TCPSEntities model = new TCPSEntities())
    {
        EmployeeRoles er = model.EmployeeRoles.First(p=>p.EmployeeId == 123);
        er.Roles = GetDefaultRole(model);
        model.SaveChanges();
     }

}

private static Roles GetDefaultRole(TCPSEntities model)
{
    Roles r = null;
    r = model.Roles.First(p => p.RoleId == 1);
    return r;
}
于 2008-10-01T18:34:15.970 に答える
2

私が理解していることから、モデルを(「新しいXXXXEntities()」ビットを介して)できるだけまれにインスタンス化する必要があります。MS(http://msdn.microsoft.com/en-us/library/cc853327.aspx)によると、これはかなり大きなパフォーマンスヒットです。したがって、using()構造でラップすることはお勧めできません。私がプロジェクトで行ったことは、コンテキストの同じインスタンスを常に提供する静的メソッドを介してそれにアクセスすることです。

    private static PledgeManagerEntities pledgesEntities;
    public static PledgeManagerEntities PledgeManagerEntities
    {
        get 
        {
            if (pledgesEntities == null)
            {
                pledgesEntities = new PledgeManagerEntities();
            }
            return pledgesEntities; 
        }
        set { pledgesEntities = value; }
    }

そして、私はそれを次のように取得します:

    private PledgeManagerEntities entities = Data.PledgeManagerEntities;
于 2009-03-18T21:04:50.117 に答える
2

はい - Entity Framework V1 では、2 つ以上のコンテキストでの作業はサポートされていません。

まだ見つけていない場合に備えて、EF に関するよくある質問がhttp://blogs.msdn.com/dsimmons/pages/entity-framework-faq.aspxにあります。

于 2008-10-04T18:42:52.273 に答える