Comment associer des objets de plusieurs contextes à l'aide d'Entity Framework

.net c# entity-framework

Question

Je suis très nouveau dans le cadre de l'entité, alors s'il vous plaît supportez-moi ...

Comment puis-je relier deux objets de contextes différents ensemble?

L'exemple ci-dessous lève l'exception suivante:

System.InvalidOperationException: la relation entre les deux objets ne peut pas être définie car ils sont attachés à différents objets 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;
}

L'utilisation d'un seul contexte n'est pas une option car nous utilisons l'EF dans une application ASP.NET.

Réponse acceptée

Vous devrez utiliser le même contexte (vous pouvez le transmettre à la méthode getdefaultrole) ou repenser les relations et étendre l'entité.

EDIT: Je voulais ajouter que c'était pour l'exemple fourni. Pour utiliser asp.net, vous devez bien réfléchir à votre contexte et à vos relations.

Vous pouvez simplement passer le contexte .. 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;
}

Réponse populaire

Une autre approche que vous pouvez utiliser ici consiste à détacher des objets d'un contexte, puis à les attacher à un autre contexte. C'est un peu un bidouillage, et cela peut ne pas fonctionner dans votre situation, mais cela pourrait être une option.

    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();
    }


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow