Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException / 25 сообщений из 54, страница 1 из 3
23.03.2018, 16:39
    #39619652
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
В ошибке написано, что в объекте не установлено поле, которое является ссылкой на другой объект.

А самое волшебство в том, что если поставить точку останова, то все работает нормально!

Вот вырезка из кода:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  // Это таблица 
 public class Account
    {
        //код пользователя
        [Key]
        public int Object_Id {get; set;}
        [Required]
        public virtual Company CompanyOwner { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public virtual Account UserOwner { get; set; }
        [Required]
        public virtual AccountGroup AGroup { get; set; } 
    }


  //   Это код

   MyAppContext db = new MyAppContext();

   Account currentAccount = db.Accounts.FirstOrDefault(x => x.Object_Id == AccountId);
   currentAccount.Password = NewPassword;
   try
            {
                db.SaveChanges();
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
              Вот сюда и вываливается ссылаясь на то, что не установлены поля: CompanyOwner и AccountGroup
            }



Но если установить точку останова на db.SaveChanges();, а потом просто продолжить, то все работает.

Наиболее вероятная причина - не успевает все подгружаться ...
Как вообще быть?

ЗЫ
Прошу сильно не пинать - я только начал изучать это место ...
...
Рейтинг: 0 / 0
23.03.2018, 16:47
    #39619658
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Если все вызовы синхронные, то это странно. Покажи оригинальный текст ошибки валидации, а не интерпретацию.
...
Рейтинг: 0 / 0
23.03.2018, 16:51
    #39619661
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
SanekНаиболее вероятная причина - не успевает все подгружаться ...Поля с ленивой загрузкой. Возможно, при точке останова отладчик эти поля дочитывает, чтобы показать тебе свойства объекта, потом ты его успешно сохраняешь.

Ты не указываешь в Entity-классе ключи для этих полей. Сами поля ленивые и тоже не заполнены. Вот при сохранении и ругается - ему неоткуда взять информацию об этих полях. Либо добавь свойства CompanyOwnerId и AccountGroupId, либо Include
...
Рейтинг: 0 / 0
23.03.2018, 16:52
    #39619662
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Код: c#
1.
db.Accounts.Include("Company").Include("AccountGroup").First...
...
Рейтинг: 0 / 0
23.03.2018, 17:10
    #39619686
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Konst_One,

Спасибо помогло !!!

Только:
Код: c#
1.
Account currentAccount = db.Accounts.Include("CompanyOwner").Include("AGroup").FirstOrDefault(x => x.Object_Id == AccountId);




Shocker.Pro, авторПоля с ленивой загрузкой. Где почитать?
...
Рейтинг: 0 / 0
23.03.2018, 17:13
    #39619690
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Sanek,
Еще вот так попробуй. Интересно, поможет?
db.Accounts.FirstOrDefault(x => x.Object_Id == AccountId). ToList()
...
Рейтинг: 0 / 0
23.03.2018, 17:15
    #39619693
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
И еще вопрос "вдогонку"

Как можно обойти такие конструкции
Код: c#
1.
db.Accounts.Include("CompanyOwner").Include("AGroup").FirstOrDefault(x => x.Object_Id == AccountId);



Я в том смысле, что таблицы переименовываются ... и если использовать запросы в таком виде, то ошибку можно отловить только в процессе исполнения ...

Как-то можно ведь прямо на таблицу ссылаться?
...
Рейтинг: 0 / 0
23.03.2018, 17:17
    #39619696
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Не нравится мне такая ошибка.
Апдейт одного поля.
Оба FK не трогаются.
Какого фига ОРМ не разрулил ситуацию непонятно.
...
Рейтинг: 0 / 0
23.03.2018, 17:18
    #39619697
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
что значит переименовываются? у вас EF перестанет работать модель данных
...
Рейтинг: 0 / 0
23.03.2018, 17:18
    #39619698
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Petro123,

Нельзя сделать ToList для FirstOrDefault )))
...
Рейтинг: 0 / 0
23.03.2018, 17:18
    #39619699
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
SanekКак можно обойти такие конструкциипроверь мой код выше
...
Рейтинг: 0 / 0
23.03.2018, 17:19
    #39619702
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Konst_Oneчто значит переименовываются? у вас EF перестанет работать модель данныхон о том что компилятор не даст ошибку. Промолчит.
...
Рейтинг: 0 / 0
23.03.2018, 17:20
    #39619703
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
SanekКак можно обойти такие конструкции
1) nameof
2) перегруженный метод Include, который принимает не string, а expression
...
Рейтинг: 0 / 0
23.03.2018, 17:20
    #39619704
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Konst_One,

Ну технически я не программу делаю, а в конструкторе играюсь что бы модель нормальную сделать ...
просто модель тестирую. ... а когда ошибки нахожу - меняю модель данных ))) вот тут и рождаются проблемы ...

а при смене модели (в т.ч. имен таблиц, полей и т.п.) базу перестраиваю и все )
...
Рейтинг: 0 / 0
23.03.2018, 17:21
    #39619706
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
SanekPetro123,

Нельзя сделать ToList для FirstOrDefault )))тьфу ты)))
...
Рейтинг: 0 / 0
23.03.2018, 17:21
    #39619708
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Petro123Какого фига ОРМ не разрулил ситуацию непонятно.ОРМ не знает, трогались поля или нет. Чтобы знал, достаточно добавить свойства в модель, как я писал выше. Они все равно есть в базе, они все равно потом понадобятся и не надо будет лишнее инклюдить - лишний трафик
...
Рейтинг: 0 / 0
23.03.2018, 17:22
    #39619709
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
SanekавторПоля с ленивой загрузкой. Где почитать?google entity framework lazy loading
...
Рейтинг: 0 / 0
23.03.2018, 17:23
    #39619711
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Sanek,
Дай сам запрос что идет в базу.
...
Рейтинг: 0 / 0
23.03.2018, 17:25
    #39619712
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
SanekКак можно обойти такие конструкцииShocker.ProЛибо добавь свойства CompanyOwnerId и AccountGroupId...
...
Рейтинг: 0 / 0
23.03.2018, 17:27
    #39619714
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
ТС,
в описание Account надо добавлять
...
Рейтинг: 0 / 0
23.03.2018, 17:29
    #39619715
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Petro123Sanek,
Дай сам запрос что идет в базу.
Делом займись
Petro123Желающим увидеть код, сегодня попробую.мы ждем
...
Рейтинг: 0 / 0
23.03.2018, 17:29
    #39619716
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Petro123,

Криминала не вижу )


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
exec sp_executesql N'SELECT 
    [Limit1].[Object_Id] AS [Object_Id], 
    [Limit1].[Login] AS [Login], 
    [Limit1].[Password] AS [Password], 
    [Limit1].[Object_Id1] AS [Object_Id1], 
    [Limit1].[CompanyName] AS [CompanyName], 
    [Limit1].[Owner_Object_Id] AS [Owner_Object_Id], 
    [Limit1].[Object_Id2] AS [Object_Id2], 
    [Limit1].[GroupName] AS [GroupName], 
    [Limit1].[UserOwner_Object_Id] AS [UserOwner_Object_Id]
    FROM ( SELECT TOP (1) 
        [Extent1].[Object_Id] AS [Object_Id], 
        [Extent1].[Login] AS [Login], 
        [Extent1].[Password] AS [Password], 
        [Extent1].[UserOwner_Object_Id] AS [UserOwner_Object_Id], 
        [Extent2].[Object_Id] AS [Object_Id1], 
        [Extent2].[CompanyName] AS [CompanyName], 
        [Extent2].[Owner_Object_Id] AS [Owner_Object_Id], 
        [Extent3].[Object_Id] AS [Object_Id2], 
        [Extent3].[GroupName] AS [GroupName]
        FROM   [dbo].[Accounts] AS [Extent1]
        INNER JOIN [dbo].[Companies] AS [Extent2] ON [Extent1].[CompanyOwner_Object_Id] = [Extent2].[Object_Id]
        INNER JOIN [dbo].[AccountGroups] AS [Extent3] ON [Extent1].[AGroup_Object_Id] = [Extent3].[Object_Id]
        WHERE [Extent1].[Object_Id] = @p__linq__0
    )  AS [Limit1]',N'@p__linq__0 int',@p__linq__0=1
go
...
Рейтинг: 0 / 0
23.03.2018, 17:29
    #39619717
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Shocker.ProОРМ не знает, трогались поля или нет.
Читал что он снимок делает.
Если он умный то пойдет update field одного поля.
Он не умеет?
Про свойства не понял. Всегда грузить все fk?
...
Рейтинг: 0 / 0
23.03.2018, 17:31
    #39619719
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Petro123,

Код: sql
1.
2.
3.
4.
5.
exec sp_executesql N'UPDATE [dbo].[Accounts]
SET [Password] = @0
WHERE ([Object_Id] = @1)
',N'@0 nvarchar(500),@1 int',@0=N'41890cd2ac71e06b5f2c9ad5ccc07b45',@1=1
go
...
Рейтинг: 0 / 0
23.03.2018, 17:31
    #39619720
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException
Shocker.Pro
Petro123Sanek,
Дай сам запрос что идет в базу.
Делом займись
Petro123Желающим увидеть код, сегодня попробую.мы ждемя же там оставил код. Не понял тебя.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / При вызове DbContext.SaveChanges() возникает исключение DbEntityValidationException / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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