我正在使用 Entity Framework 4.0,并使用 POCO 对象。当我从数据库中填充 POCO 对象时,我将属性值转换为我自己的域对象,我们可以将其称为我的模型。
必然地,我的 Model 的字段是否为 Nullable 取决于它在数据库中映射到的值是来自 NULL 还是 NOT NULL 列。我不会详细介绍,但这些值在数据库中必须可以为空,因为用户可以在将对象发布给公众之前部分保存对象的草稿。在这种情况下,我有几个可以为空的字段。所以假设我的模型看起来像:
public class MyModel
{
public int? Field1 {get; set; }
public DateTime? Field2 {get; set; }
public int Field3 {get; set; }
}
如果我在我的视图中使用这个模型,并带有可空字段,我开始收到错误消息,告诉我我不能在不同的地方使用可空属性作为值,比如 HTML 帮助器等。我可以说类似的东西if (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }
,但对于一个看法。
我考虑创建一个 ViewModel 对象,该对象继承自我的原始域对象,并且new
如果基本版本为空,我的可空字段的不可空版本会返回适当的值。所以像:
public class MyViewModel : MyModel
{
public new int Field1
{
get { return base.Field1 ?? 7; }
}
public new DateTime Field2
{
get { return base.Field2 ?? DateTime.Now; }
}
}
我的问题是我并不总是知道要显示的好的“默认”值。如果当基值为 null 时我在 View Model 的 getter 中抛出异常怎么办?这是不好的做法吗?
我基本上是在寻找关于如何处理模型中的可为空字段的最佳实践,尤其是在视图中显示时。