Как связать объекты от нескольких контекстов с помощью Платформы Объекта

typedef typename Tail::inUnion dummy;

Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.

template  struct Contains;

template 
struct Contains >
{
    enum { result = Contains::result };
};

template 
struct Contains >
{
    enum { result = true };
};

template 
struct Contains
{
    enum { result = false };
};

PS: Посмотрите на Boost :: Variant

PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design

14
задан Hooked 6 March 2015 в 04:38
поделиться

4 ответа

Необходимо будет использовать тот же контекст (можно передать контекст 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;
}
11
ответ дан 1 December 2019 в 13:34
поделиться

Да - работающий через 2 или больше контекста не поддерживается в V1 Платформы Объекта.

На всякий случай Вы уже не нашли его, существуют хорошие часто задаваемые вопросы на EF в http://blogs.msdn.com/dsimmons/pages/entity-framework-faq.aspx

2
ответ дан 1 December 2019 в 13:34
поделиться

Из того, что я понимаю, Вы хотите инстанцировать своей модели (через "новый XXXXEntities ()" бит) как редко как возможной. Согласно MS (http://msdn.microsoft.com/en-us/library/cc853327.aspx), это - довольно существенный хит производительности. Так перенося его в использование () структура не является хорошей идеей. То, что я сделал в своих проектах, должно получить доступ к нему через статический метод, который всегда обеспечивает тот же экземпляр контекста:

    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;
2
ответ дан 1 December 2019 в 13:34
поделиться

Другой подход, который вы могли бы здесь использовать, - отсоединить объекты от одного контекста, а затем присоединить их к другому контексту. Это своего рода хитрость, и она может не сработать в вашей ситуации, но это может быть вариант.

    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();
    }
3
ответ дан 1 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: