我在SO上引用了这个问题:
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 { }
}
}
会有一份联盟委员会名单,我希望根据状态获得所有佣金的总数。可以将它存放在不同的型号中吗?需要一些实施建议。
答案 0 :(得分:2)
为什么要尝试保留计算字段?使用属性中的计算逻辑,您可以将属性保留为瞬态,并且每次都可以随时计算。这样就没有必要坚持下去了。你的计算似乎并不昂贵。在业务逻辑发生变化的情况下,这种方法还具有计算值始终准确的优势。
持久存储计算字段的一个用例是报告您希望直接从数据库中提取。如果是这种情况,我建议改为查看mapreduce查询:http://en.wikipedia.org/wiki/MapReduce
答案 1 :(得分:1)
我喜欢EF Code First但我实际上并不是“先编码”。我通常会在数据库中创建模式,并使用EF Code First Powertool进行逆向工程。 Code First的重量更轻,但整个数据库升级过程在开发和生产过程中都很痛苦,因此我发现以旧的方式维护数据库更容易,并通过逆向工程来获取我的实体。
您可以尝试这种方法,在SQL Server中创建计算字段,然后对其进行反向工程以查看生成的代码。