我正在使用映射到我的数据库的实体框架。我有一个 Basket 模型,它可以有许多 BasketItem 模型,并且我有 Promotions 和 Coupons 模型。这是针对电子商务结帐功能的,我只是不明白它是如何工作的,这里是:
因为我的 BasketItems 与 Basket 有外键关系,如果我想在部分类中汇总我的篮子项目的小计,我可以这样做:
public decimal Subtotal {
get {
return this.BasketItems.Sum(pb => pb.Subtotal);
}
}
这很有帮助,因为我可以在视图中使用它,传递数据库上下文没有任何麻烦,而且它是 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 属性的最佳方法。
非常感谢和道歉这么长的阅读:)