データベースにマップされた Entity Framework を使用しています。多くの BasketItem モデルを持つことができる Basket モデルがあり、プロモーション モデルとクーポン モデルがあります。これは e コマースのチェックアウト機能のためのもので、これがどのように機能するのかわかりません。
BasketItems には Basket との外部キー関係があるため、部分クラスの Basket アイテムの Subtotal を合計したい場合は、次のようにすることができます。
public decimal Subtotal {
get {
return this.BasketItems.Sum(pb => pb.Subtotal);
}
}
ビュー内でこれを使用できるため、これは役に立ちます。DB コンテキストを渡すことで混乱することはなく、DRY などです。
プロモーションやクーポンを小計に適用したいのですが、理想的には次のようにしたいと考えています。
public decimal DiscountedSubtotal {
get {
decimal promotions_discount = 0;
decimal coupons_discount = 0;
return Subtotal - promotions_discount - coupons_discount;
}
}
しかし、データベースにクレイジーで不必要な関係を作成するか、この機能を機能させるための軽いハッキングを行わなければ、プロモーションやクーポンにアクセスすることはできません. この問題を克服するために何をすべきかわかりません。
解決策 1:
public decimal DiscountedSubtotal(DatabaseEntities db) {
decimal promotions_discount = from p in db.Promotions
select p.Amount;
decimal coupons_discount = from c in db.Coupons
select c.Amount;
return Subtotal - promotions_discount - coupons_discount;
}
ビュー ページでこれを使用したくありません。また、使用するたびにコンテキストを送信する必要があります。
解決策 2: (未テスト)
public List<Promotion> Promotions { get; set; }
public List<Coupon> Coupons { get; set; }
public Basket()
: base() {
DatabaseEntities db = new DatabaseEntities();
Promotions = db.Promotions.ToList();
Coupons = db.Coupons.ToList();
}
ちょっとしたハッキングでプロモーションやクーポンへの参照が得られる可能性がありますが、以前に新しいコンテキストを作成する際に問題が発生したことがあり、私が理想とする DiscountedSubtotal プロパティに到達するためのより良い方法があるかどうかはわかりません.
私の質問を要約すると、DiscountedSubtotal プロパティを取得する最良の方法を知りたいと思います。
長い間お読みいただき、誠にありがとうございました:)