Entity Framework를 사용하여 여러 컨텍스트의 개체를 연결하는 방법

.net c# entity-framework

문제

그래서 나와 함께 곰하시기 바랍니다, 엔티티 프레임 워크에 아주 새로운 오전 ...

서로 다른 컨텍스트의 두 객체를 어떻게 연관시킬 수 있습니까?

아래 예제에서는 다음 예외가 throw됩니다.

System.InvalidOperationException : 두 Object 사이의 관계를 다른 ObjectContext 개체에 연결 했으므로이 개체의 관계를 정의 할 수 없습니다.

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를 사용하기 때문에 하나의 컨텍스트를 사용하는 것은 옵션이 아닙니다.

수락 된 답변

동일한 컨텍스트 (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;
}

인기 답변

여기에서 사용할 수있는 또 다른 방법은 객체를 하나의 컨텍스트에서 분리 한 다음 다른 컨텍스트에 연결하는 것입니다. 이는 약간의 해킹이며 사용자의 상황에서는 작동하지 않을 수도 있지만 옵션 일 수 있습니다.

    public void GuestUserTest()
    {
        SlideLincEntities ctx1 = new SlideLincEntities();
        GuestUser user = GuestUser.CreateGuestUser();
        user.UserName = "Something";
        ctx1.AddToUser(user);
        ctx1.SaveChanges();

        SlideLincEntities ctx2 = new SlideLincEntities();
        ctx1.Detach(user);
        user.UserName = "Something Else";
        ctx2.Attach(user);
        ctx2.SaveChanges();
    }


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.