Сохранение частичных значений свойств между контекстами EF - PullRequest
0 голосов
/ 15 марта 2012

Если я создаю модель с использованием EF, то расширяю ее, создавая еще один частичный класс, как я могу сохранить расширенные значения свойств между контекстами EF? * 1001 Т.е. *

У меня есть объект Stuff, который отображается в таблицу базы данных. Я расширяю его, создав частичный класс:

public partial class Stuff
{
    public int SomeInt { get; set; }
}

Затем установите это значение и вызовите его в разных контекстах:

        Guid id = Guid.NewGuid();
        using (var ctx = new EFPrototypeEntities())
        {
            string someData = Guid.NewGuid().ToString("N");
            Stuff newStuff = new Stuff
                {
                    Id = id,
                    SomeDate = DateTime.Now,
                    SomeData = someData,
                    SomeInt = 100
                };
            Console.WriteLine("Added stuff data :" + someData + " with int " + newStuff.SomeInt);
            ctx.AddToStuffs(newStuff);
            ctx.SaveChanges();
        }

        using (var ctx = new EFPrototypeEntities())
        {
            Stuff stuff = ctx.Stuffs.First<Stuff>(s => s.Id == id);
            Console.WriteLine("Got stuff with data : " + stuff.SomeData + " and int " + stuff.SomeInt);
        }

SomeInt возвращает 0 во втором контексте. Он возвращает 100, если я оберну все это только в один контекст.

1 Ответ

0 голосов
/ 15 марта 2012

вы должны понимать механизм контекста Entity Framework. Разный контекст использует разную память.

Когда вы получаете данные из второго контекста, он получает данные непосредственно из базы данных, поэтому данные из первого не могут передаваться во второй.

Существуют некоторые варианты решения, которые зависят от вашей структуры кода:

  1. если 2 объекта доступны в одной и той же функции, просто отсоедините объект от 1-го контекста и присоедините его ко 2-му

  2. если к 2 контекстам обращаются в 2 разных функциях / вызовах, так что вы можете использовать один контекст для всего приложения. Вы можете реализовать это с помощью IOC (инверсия управления). Некоторыми распространенными методами являются IOC, Autofac, Microsoft Unity ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...