3

私が作成する多くのアプリでは、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 データベースを使用しました。

ノースウィンド データベース

あらゆる提案を受け入れます。

4

2 に答える 2

1

考えられるアプローチの 1 つを次に示します。partial class Orderを次のようなプロパティで宣言します。

string CustomerNameOrDefault { get { return Customer != null ? Customer.ContactName : "Unknown"; } }

次に、コードは次のようになります。

var viewModel = new RandomViewModel
{
    ContactName = Order.CustomerNameOrDefault,
...
于 2012-07-03T17:40:39.057 に答える
0

ありとあらゆる提案を受け入れます。

個人的には、AutoMapperを使用して、ドメインモデルとビューモデルの間でマッピングを行っています。これで、コードは次のようになります。

RandomViewModel viewModel = Mapper.Map<Order, RandomViewModel>(Order);
于 2012-07-03T17:22:04.143 に答える