Как я могу иметь типы значений, которые отображаются в обнуляемые столбцы базы данных в Entity Framework? - PullRequest
1 голос
/ 02 февраля 2011

У меня есть следующая модель сущности:

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; }  
}

В соответствующей таблице базы данных все поля созданы как "не нулевые".Я хочу, чтобы некоторые поля были пустыми.Как мне это сделать?

1 Ответ

9 голосов
/ 02 февраля 2011

На стороне базы данных вам придется изменить поля, которые вы хотите сделать необязательными, чтобы они могли быть нулевыми. Оператор 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
...