Entity Framework с отключенной сущностью Странное поведение при обновлении

1

Это образец, иллюстрирующий проблему

Человек должен иметь тип PersonType

HasRequired(o => o.PersonType).WithMany(o => o.Persons);

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

   //Person with ID=4 exists in DB
     Person p = new Person() { PersonId = 4, PersonType= null, Address = ... };                

    //PersonType is null here              
    using (var ctxNew = new Context())
    {
       var entry = ctxNew.Entry(p);
       entry.State = System.Data.Entity.EntityState.Modified;
       ctxNew.SaveChanges(); //Ok. But shouldn't be
    }

По какой-то причине SaveChanges() успешно выполняется без ошибок. Но, как я понимаю, это должно привести к отказу. Это проблема для меня, так как я получаю такие объекты из своего уровня обслуживания, и я не хочу, чтобы они терпели неудачу. Какая проблема здесь?

  • 0
    Какая проверка должна точно провалиться?
  • 0
    HasRequired (o => o.PersonType) .WithMany (o => o.Persons);
Показать ещё 2 комментария
Теги:
entity-framework

1 ответ

1
Лучший ответ

Проблема здесь в том, что когда вы делаете:

entry.State = System.Data.Entity.EntityState.Modified;

EF отмечает как Изменено только указанное лицо. Если у вашего объекта есть другие связанные объекты (например, свойство навигации PersonType), они останутся в состоянии без изменений и не будут отправлены в базу данных (и не проверены) на вызов метода SaveChanges.

Для таких свойств вы можете изменить свое состояние на Модифицированное, вызвав метод SetModifiedProperty:

entry.SetModifiedProperty("PersonType");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню