Ваша модель не отражает вашу базу данных и поэтому не работает.Вы должны определить WorkedYears
с int?
.Если в вашем представлении это свойство является обязательным, вы должны определить новый класс «модель представления», в котором WorkedYears будет иметь значение NULL и обработать то, что должно содержать это свойство, если ваша база данных содержит значение NULL.
Исправьте POCO для EF:
public class User
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int? WorkedYears { get; set; }
}
Модель правильного просмотра:
public class UserModel
{
public int Id { get; set; }
public string Name { get; set; }
public int WorkedYears { get; set; }
}
Ваш контроллер отвечает за преобразование User
<-> UserModel
.Если вы все еще хотите использовать один класс, вы должны добавить второе не сопоставленное свойство, которое будет внутренне использовать nullabe WorkedYears:
public class User
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int? WorkedYears { get; set; }
[NotMapped]
public int WorkedYearsDisplay
{
get
{
return WorkedYears ?? 0;
}
set
{
WorkedYears = value == 0 ? new Nullable<int>() : value;
}
}
}
Вывод: если ваша база данных содержит поле Nullable, которое может содержать нулевое значение, вы должны иметь свойство Nullable вваш сопоставленный класс.Другого пути нет.