MVC实体框架部分类访问DB属性值

时间:2012-10-24 16:50:41

标签: asp.net-mvc entity-framework

我正在使用映射到我的数据库的Entity Framework。我有一个篮子模型,可以有很多BasketItem模型,我有促销和优惠券模型。 这是电子商务结账功能,我只是不明白这是如何工作的,这里是:

因为如果我想在部分课程中总结我的篮子项目的小计,我的BasketItems与篮子有外键关系,我可以这样做:

        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;
        }

我不想在我的View页面中使用它,而且每次我想使用它时都必须通过我的上下文发送。

解决方案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属性的最佳方法。

非常感谢并为这么长的阅读道歉:)

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是你并没有真正使用一致的架构。

在大多数情况下,您应该有一个业务层来处理这种逻辑。然后,该业务层将具有CalculateDiscountForProduct()CalculateNetPrice()等函数,这些函数将发送到数据库并检索完成业务规则所需的数据。

业务类将与返回数据对象的数据层进行通信。您的视图只需要它的视图模型,您可以从业务层返回的业务对象中填充它。

一种典型的方法可能是:

public ActionResult Cart() {
    var model = _cartService.GetCurrentCart(userid);
    return View(model);
}

因此,当您应用折扣或优惠券时,您可以调用_cartService.ApplyDiscount(model.DiscountCode);之类的方法,然后将新模型返回到视图。

您可能会很好地研究Mvc Music Store示例项目,因为它包含购物车功能和促销代码。

http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-1