powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Изменения не влияют на EntityState (остаётся Detached)
17 сообщений из 17, страница 1 из 1
Изменения не влияют на EntityState (остаётся Detached)
    #38232329
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Прошу помощи!

Есть DbContext context с 2-мя сущностями.

Если добавляю новую запись к одной из сущностей
Код: c#
1.
context.Сущность1.Add(сущность1)

- всё в порядке:
Код: c#
1.
 context.Entry(сущность1).State = Added 

и SaveChanges() успешно добавляет запись.

Но изменение не работает!
Меняю значение:
Код: c#
1.
сущность1.поле1="QQQ";

а статус не становится Modified, а остаётся:
Код: c#
1.
 context.Entry(сущность1).State = Detached


И, конечно, я не могу сохранить изменение.
Что я делаю не так?
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232466
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё выяснил, что если после изменения сущности1, повторить их, но уже ссылаясь на сущность непосредственно через context, то тогда изменения в Поле1 сохранятся в базе:
Код: c#
1.
2.
3.
var r = (from i in context.Сущность1 where i.ID == сущность1.ID select i).FirstOrDefault();
       r.Поле1 = сущность1.Поле1;
context.SaveChanges();
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232513
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и надо делать, чтобы сущность была загружена в expression tree.
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232556
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как в этом случае отделять функционал хранилища данных от webUI?

Хранилище реализовано в отдельном проекте.
В нём реализована связка сущностей и таблиц БД:
Код: c#
1.
2.
3.
4.
5.
public class EFDbContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }
    }


В нём реализован метод получения сущности и метод сохрания:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class EFProductRepository:IProductRepository 
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<Product> Products
        {
            get { return context.Products; }
        }

        public void SaveProduct(Product product) {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            context.SaveChanges();
        }
    }


Из вне (webUI) я получаю Products, делаю там изменения и хочу методом SaveProduct сохранить изменения.
Как правильно сделать?
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232665
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
void Update(MyEntity obj)
{
    ctx.Entry(obj).State = Modified;
    ctx.SaveChanges();
}
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232703
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К, спасибо за совет.

Теперь никак не могу добраться до сущности EntityState. Это же перечисление из System.Data?
Ругается на System.Data.EntityState.Modified - что не существует. Что я забыл подключить?
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232789
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VPАлексей К, спасибо за совет.

Теперь никак не могу добраться до сущности EntityState. Это же перечисление из System.Data?
Ругается на System.Data.EntityState.Modified - что не существует. Что я забыл подключить?А так?
Код: c#
1.
2.
3.
4.
5.
void Update(MyEntity obj)
{
    ctx.Entry(obj).State = EntityState.Modified;
    ctx.SaveChanges();
}
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232815
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К, так тоже самое.
Пишет, что:
The type 'System.Data.EntityState' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

У меня подключена 'System.Data.Entity, Version=4.1.0.0

Зачем требует 4.0.0.0 ? Неужели в 4.1.0.0 удалили 'System.Data.EntityState' ?
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38232945
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это CodeFirst. Там в зависимости от версии он идёт или в System.Data.Entity.dll, входящей в состав .Net Framework 4.5. Или в EntityFramework.dll, устанавливаемой, например, через NuGet.
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38233099
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,
и всё же, предложенный Вами способ не идеален, ведь в результате ВСЕ поля записи будут обновлены, включая те, которые пользователь не трогал.

Неужели, верное решение, это тупое сравнивание каждого поля context.Сущность с полем экземляра сущности (который вернул web UI), и в случае неравенства присваивать полю context.Сущность значение поля экземляра сущности ?

Есть ли способ перебора всех полей сущности в цикле (например, foreach) ?
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38233272
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А гугль расчехлять не пробовали?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
bool UpdateCustomer(Customer customer) {

    entities.Customers.Attach(entities.Customers.Single(c => c.ID == customer.ID));

    entities.Customers.ApplyCurrentValues(customer);

    entities.Savechanges();

}
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38234511
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VPАлексей К,
и всё же, предложенный Вами способ не идеален, ведь в результате ВСЕ поля записи будут обновлены, включая те, которые пользователь не трогал.Зато нет лишнего запроса к БД на выборку обновляемой записи.
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38234690
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VP ВСЕ поля записи будут обновлены, включая те, которые пользователь не трогал.

Делаю как тут , вначале этач, затем обновление поля. Обновляет только то, что нужно.
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38235086
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех за помощь.
К сожалению, ни один из предложенных способов у меня не заработал.

Но заработало следующее: поставил EF 4.4 вместо 4.1.
Появилось пространство System.Data.Entity.Migrations
И появился метод: contextDB.Products. AddOrUpdate (product)
После чего contextDB.SaveChanges() работает на ура.
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38235206
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_VPcontextDB.Products. AddOrUpdate (product)
Так он же через дополнительный селект работает.
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38268177
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, господа.
Приходится опять поднимать эту тему, т.к. возникло очередное непонимание.

Мне надо добавить запись в таблицу через EF.

Создаю новый объект сущности:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                History history = new History
                {
                    ID=0,
                    Topic = Topic,
                    uName= uName,
                    IP = userIP,
                    Browser = userBrowser,
                    Memo = s,
                    DT = DateTime.Now 
                };


Добавляю его к контексту:
Код: c#
1.
context.Historys.Add(history);

Статус становится: context.Entry(history).State = Added
Сохраняю:
Код: c#
1.
context.SaveChanges();

Статус становится: context.Entry(history).State = Unchanged

Захожу в таблицу - и ничего не добавилось.
Где рыть?
...
Рейтинг: 0 / 0
Изменения не влияют на EntityState (остаётся Detached)
    #38268476
Andrey_VP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимается - по глупости смотрел в др. таблицу.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Изменения не влияют на EntityState (остаётся Detached)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]