在我编写的很多应用程序中,我发现自己为DBML对象的子类分配了一个默认值。这是我必须要做的当前方式的一个例子:
var viewModel = new RandomViewModel
{
ContactName = (Order.Customer != null ? Order.Customer.ContactName : "Unknown"),
Date = Order.OrderDate,
Shipper = (Order.Shipper != null ? Order.Shipper.CompanyName : "Fedex"),
ShipCity = Order.ShipCity,
ShipRegion = Order.ShipRegion,
FirstCategory = (Order.OrderDetails.First().Product.Category != null
? Order.OrderDetails.First().Product.Category.CategoryName
: "DefaultCategory",
ItemCount = Order.OrderDetails.Count
};
理想情况下,它最具可读性:
var viewModel = new RandomViewModel
{
ContactName = Order.Customer.ContactName ?? "Unknown",
Date = Order.OrderDate,
Shipper = Order.Shipper.CompanyName ?? "Fedex",
ShipCity = Order.ShipCity,
ShipRegion = Order.ShipRegion,
FirstCategory =
Order.OrderDetails.First().Product.Category.CategoryName
?? "DefaultCategory",
ItemCount = Order.OrderDetails.Count
};
但是对于任何null的外键控对象都存在NullReferenceException。我不认为null合并在这里是可用的,但是还有其他一些方法来完成这个非常频繁的任务吗?也许有类/方法扩展,甚至VS宏?
我在这个例子中使用了Northwind数据库:
对所有建议开放。
答案 0 :(得分:1)
这是一种可行的方法。声明partial class Order
,使用以下属性:
string CustomerNameOrDefault { get { return Customer != null ? Customer.ContactName : "Unknown"; } }
然后您的代码变为:
var viewModel = new RandomViewModel
{
ContactName = Order.CustomerNameOrDefault,
...
答案 1 :(得分:0)
对所有建议开放。
我个人使用AutoMapper在我的域模型和视图模型之间进行映射。您的代码现在可以变为:
RandomViewModel viewModel = Mapper.Map<Order, RandomViewModel>(Order);