Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 EF6 некорректная вставка записи  [new]
Александр_1984
Member

Откуда:
Сообщений: 7
Всем доброго времени суток. Подскажите не могу разобраться в чем проблема. Есть функция:

public static void Insert<TEntity>(TEntity entity) where TEntity : class
        {
            TUDBContext.TUDBContext db = new TUDBContext.TUDBContext();

            db.Entry(entity).State = System.Data.Entity.EntityState.Added;
            db.SaveChanges();
        }


Добавляем с ее помощью запись:

District distr = new District
                {
                    name = TBDistrictName.Text,
                    region = regionRep.region.Where(r => r.id == (int)CBRegionName.SelectedValue).FirstOrDefault()
                };                

                Repository.Insert(distr);


District добавляется, но сначала добавляется Region и District привязывается к этому добавленному региону
12 ноя 16, 23:09    [19887087]     Ответить | Цитировать Сообщить модератору
 Re: EF6 некорректная вставка записи  [new]
hVostt
Member

Откуда:
Сообщений: 18564
Александр_1984,

проблема в реализации репозитория. все преимущества EF сведены практически к нулю. зачем Insert каждый раз создаёт контекст? зачем это шаманство с Entity.State?

естественно, что запись Region из чужого контекста добавляется ещё раз, новый созданный контекст в функции Insert ничего не знает о других объектах.

работайте с одним единым контекстом, избегайте костылей с ручной установкой State. не надо создавать контекст на каждый чих! контекст обычно создаётся на транзакцию, в рамках которой происходит вся работа, и может быть извлечено, создано и изменено много записей. закончили работу, сделали SaveChanges -- уничтожили контекст, и никаких ошмётков не осталось.
13 ноя 16, 00:10    [19887194]     Ответить | Цитировать Сообщить модератору
 Re: EF6 некорректная вставка записи  [new]
Александр_1984
Member

Откуда:
Сообщений: 7
hVostt,

Спасибо за подсказку, я подозревал что контекст тут лишний ))
не пойму как ставить state не вручную? откуда его взять можно?
13 ноя 16, 22:23    [19888832]     Ответить | Цитировать Сообщить модератору
 Re: EF6 некорректная вставка записи  [new]
hVostt
Member

Откуда:
Сообщений: 18564
Александр_1984
не пойму как ставить state не вручную? откуда его взять можно?


Контекст сам различает новые и изменённые записи. Установка вручную требуется для переопределения работы контекста и её следует избегать.
14 ноя 16, 00:45    [19889153]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить