Платформа объекта 4 - не всегда обновляющий использование булево свойства ApplyCurrentValues

У меня есть простой объект для Страны, которая производится Платформой Объекта 4 использования RC VS 2010. Это смотрит что-то как ПОСТЕПЕННО ниже.

public class Company
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string ISOCode { get; set; }
    public boolean Active { get; set; }
}

Мой код репозитория ниже. 'дб' является моим контекстом, который инициализируется в конструкторе.

public void EditCountry(Country countryToEdit)
{
    db.Countries.Attach(new Country { ID = countryToEdit.ID });
    db.Countries.ApplyCurrentValues(countryToEdit);
    db.SaveChanges();
}

Изменение поля Active от лжи до истинного в countryToEdit производит следующий SQL

update [dbo].[Countries]
set [Name] = @0, [ISOCode] = @1, [Active] = @2
where ([ID] = @3)
@0 nvarchar(256),@1 nvarchar(12),@2 bit,@3 int,@0='Algeria',@1='DZ',@2=1,@3=4

Это ожидается.

Если я изменяю поле Active от истинного до лжи в countryToEdit, следующий SQL производится

update [dbo].[Countries]
set [Name] = @0, [ISOCode] = @1
where ([ID] = @2)
@0 nvarchar(256),@1 nvarchar(12),@2 int,@0='Afghanistann',@1='AF',@2=1

Нет никакой попытки, предпринятой для обновления поля Active.

6
задан Cœur 18 July 2017 в 15:40
поделиться

1 ответ

В этом ApplyCurrentValues в EF 4 вопросе есть ответ.

Это должно быть

db.Countries.Attach(db.Countries.Single(c => c.ID == countryToEdit.ID));

Если вы присоедините пустой объект-заглушку, то булевы поля инициализируются в false. Вызов ApplyCurrentValues не видит изменений в значении boolean между объектом-заглушкой и редактируемым объектом.

Приведенный выше код добавляет еще один запрос к БД, но я могу с этим жить.

7
ответ дан 17 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: