2012-12-10 29 views
2

我引用的SO这个问题:有道有一个计算领域的EF代码优先

Store read-only calculated field with Entity Framework Code First

他们的所作所为是有意义的,但我想的东西有点不同,我不知道我的实现是正确的,或者如果有任何更简单的方式来做到这一点:

public class AffiliateCommission 
{ 
    public int Id { get; set; } 
    public Merchant Merchant { get; set; } 
    public AffiliateCommissionType Type { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public int Amount { get; set; } 
    public string Status { get; set; } 
    public DateTime RecievedDate { get; set; } 
    public int TotalPaid { get 
    { 
     if (Status == "Paid") 
     { 
      return this.Amount += this.Amount; 
     } 
     return 0; 
    } 
     protected set { } 
    } 


    public int TotalUnpaid 
    { 
     get 
     { 
      if (Status == "Unpaid") 
      { 
       return this.Amount += this.Amount; 
      } 
      return 0; 
     } 
     protected set { } 
    } 
    public int TotalInvoiced 
    { 
     get 
     { 
      if (Status == "Invoiced") 
      { 
       return this.Amount += this.Amount; 
      } 
      return 0; 
     } 
     protected set { } 
    } 
} 

有将是AffiliateCommissions的名单,我想获得总关基础地位的所有佣金。将其存储在不同的模型中可能?需要一些实施建议。

回答

2

你为什么试图坚持一个计算的领域?通过属性中的计算逻辑,您可以将该属性暂时保留为瞬态,并且每次都可以进行计算。这样就没有必要坚持下去。你的计算似乎并不昂贵。在业务逻辑发生变化的情况下,这种方法还具有计算值始终准确的优点。

保留计算字段的一个用例是用于报告您希望直接从数据库中提取。如果是这样的话,我会建议查看mapreduce查询来代替:http://en.wikipedia.org/wiki/MapReduce

+0

好吧,是的,我不需要这个任何沉重的报告或任何东西,所以也许我错误地看着解决方案。我只是想弄清楚在我的asp.net MVC控制器中引入一组AffiliateCommisions的最佳路径,将该列表返回给视图,并以简单的方式在视图中提供某些记录的总和,最好避免js。对不起,如果这没有意义。一直在编码死亡游行,现在是凌晨1点。 – ledgeJumper

+0

@davidisawesome如果您使用的是强类型视图,那么您应该可以像访问其他人一样访问您的计算属性。如果不是,则可以改为使用视图模型。也许你的物业并没有计算你真正想要的东西 - 但目前看起来像'TotalUnpaid'会一直关注这一点。仅记录当前记录。如果你试图在记录中总结数值,那么这个类可能不是它的地方 – rouan

1

我喜欢EF Code First,但实际上并没有“先编码”。我通常会在数据库中创建模式,并使用EF Code First Powertool进行反向工程。 Code First的重量更轻,但是在开发和生产过程中,整个数据库升级过程可能会很痛苦,所以我发现维护数据库的旧学校方式和逆向工程师可以更容易地获得我的实体。

您可以尝试这种方法,在SQL Server中创建计算字段,然后对其进行逆向工程,以查看生成的代码。

+0

我同意,当我有现有数据时,我首先尝试编码时有很多痛苦。我认为正确的做法是通过我们的项目插入数据(如果正在迁移)。不得不重复遍历每个数据库表格更改的模型虽然也很麻烦。 – Worthy7