【问题标题】:Entity Framework Custom Property using external Parameters使用外部参数的实体框架自定义属性
【发布时间】:2012-01-13 10:55:35
【问题描述】:

我有一个 EDM,用于带回 DAL 项目中的“产品”实体集合。 MVC 网站项目引用并直接实例化 ObjectContext 并向网站返回一个 IQueryable 用于产品的分页和显示。

这个实体,为了简单起见,我们会说只有“ID”、“Rate”和“Description”属性。我想创建另一个名为“CostPerMonth”的计算属性,它将从名为“LoanAmount”的网站获取输入,并且为了简单起见,这个“CostPerMonth”属性将由((“LoanAmount”*“率”) / 12)。

我不禁觉得这个计算应该在 DAL 项目中进行,以使代码更具可重用性,因为无论在何处使用此数据,都将始终指定“LoanAmount”。我有以下可能的解决方案:

  • 为 Product 创建一个部分类,向 Product 添加一个新属性“CostPerMonth”。在网站控制器中,当数据返回时,通过遍历返回的数据并进行计算来填充这个新列?

  • 为 Product 创建一个部分类,向 Product 添加一个新属性“CostPerMonth”。在 DAL 项目中,创建一个辅助类,该类具有一个接受“LoanAmount”参数并返回一个列表的方法。这样做的问题是我需要具体化数据才能进行计算。该方法可以接受可以在用于返回产品的 Linq 查询中使用的“Skip”和“Take”参数吗?

  • 为 Product 创建一个部分类,向 Product 添加一个新属性“CostPerMonth”。使用 WCF Web 服务向解决方案添加另一层,在服务方法中进行计算并使用 REST 将数据返回到 MVC 网站?

非常感谢任何建议。

最好的问候,

标记

【问题讨论】:

    标签: c# wcf entity-framework partial-classes


    【解决方案1】:

    如果我们退后一步,真正分解您在问题中提出的问题,那么解释我的答案可能会更容易。

    • 我们有一个名为 Products 的对象/实体
    • 有一个计算字段将是 (("LoanAmount" * "Rate") / 12)
    • CostPerMonth 不需要存储在数据库中

    所以这个计算字段是产品实体的业务规则。鉴于您使用的是 MVC,因此该代码/逻辑只能放在一个地方,那就是模型。

    鉴于您使用 EF 它将位于非映射/计算字段中,并且给您一个想法的代码看起来像这样......

       [NotMapped]
        public decimal CostPerMonth
        {
            get { return (LoanAmount * Rate)/12 ; }
        }
    

    我可以持续数天来讨论在各个层中存在碎片化业务逻辑的问题。

    现在,如果您希望其他客户端轻松使用此逻辑,则需要公开一个服务来做到这一点。 (您可以使用 webAPI/service stack/wcf 等)这实际上是另一个基于您的需求的完整问题。但这里的重点是你的逻辑在一个地方。

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多