我有以下实体模型:
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; }
}
在相应的数据库表中,所有字段都创建为“not null”。我想允许一些字段为空。我该怎么做?
答案 0 :(得分:9)
在数据库方面,您必须更改要作为可选字段,以便它们可以为空。 ALTER TABLE语句可以解决问题。
ALTER TABLE Todo
ALTER COLUMN OrderId int NULL
ALTER TABLE Todo
ALTER COLUMN Priority int NULL
在应用程序方面,您需要使用nullable types。试试这个:
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; }
}
可空类型是常规值类型的变体,区别在于它可以为null。在您的代码中,您可以使用HasValue
属性测试null:
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