На стороне базы данных вам придется изменить поля, которые вы хотите сделать необязательными, чтобы они могли быть нулевыми. Оператор ALTER TABLE сделает свое дело.
ALTER TABLE Todo
ALTER COLUMN OrderId int NULL
ALTER TABLE Todo
ALTER COLUMN Priority int NULL
На стороне приложения вам нужно использовать обнуляемые типы . Попробуйте это:
public class Todo
{
[Required]
public int ID { get; set; }
public int? OrderId { get; set; } //Not required
public string Description { get; set; }
public bool Finished { get; set; }
public DateTime CreationDate { get; set; }
public int? Priority { get; set; } //Not required
public string CreatedBy { get; set; }
public bool Deleted { get; set; }
}
Обнуляемый тип - это разновидность обычного типа значения с той разницей, что он может быть нулевым. В вашем коде вы можете проверить нулевое значение с помощью свойства HasValue
:
int? foo= 42;
Console.WriteLine(foo.HasValue); // prints True
Console.WriteLine(foo.Value); // prints 42
int? bar = null;
Console.WriteLine(bar.HasValue); // prints False
Console.WriteLine(bar.Value); // throws InvalidOperationException
Все операторы этого типа отменены, что означает, что вы все равно можете выполнять арифметику с ними:
int? foo = 23;
int? bar = 17;
int? foobar = foo + bar;
Console.WriteLine(foobar); // Prints 40
int? baz = null;
int? foobaz = foo + baz + bar; // If any of them is null, the result will be null.
Console.WriteLine(foobaz); // Prints null