扩展POCO类以使用其他上下文进行计算



考虑将这两个POCO类与EF Code First一起使用。

public class Sale 
{
public int SaleId { get; set; }
public DateTime Date { get; set; }
public double Amount { get; set; }
}
public class History
{
public int HistoryId { get; set; }
public DateTime Date { get; set; }
public double Total { get; set; }
}

这一切都很好,但当我在应用程序中使用时,我实际上希望我的类能代表更多:

public class SaleWithAllIWant
{
public int SaleId { get; set; }
public DateTime Date { get; set; }
public double Amount { get; set; }
public double Calculation   // Read only and NOT stored in DB
{
get
{
// Obtain Total from _Context.History on Date
// Perform Calculation
}
}
}

我希望能够使用EF的美丽,并能够做一些事情,比如:

gridSales.DataSource = _Context.Sales.ToList();

然而,Sale并没有我的所有信息。SaleWithAllIWant不是一个上下文,所以我必须做一些后期屠宰,才能把Sale的所有东西都放到SaleWithAllIWant中。我可以使用未绑定的列或类似的列,但它会变得混乱并开始影响性能。

我不能把SaleWithAllIWant放在我的POCO课上,因为计算需要历史背景的知识。我的DAL项目(创建DbSets)引用了我的Model项目(保存POCO类),因此Model项目不能引用DAL来访问上下文,因为它将是一个循环引用。

解决方案是把所有这些都放在一起,而不是有一个单独的DAL和Model项目吗?

我怀疑我有更好的失踪方式。非常感谢所有评论。

如果不单独部署DAL和Model,我肯定会考虑将它们合并在一起。

也就是说,Calculation看起来像是一个很好的扩展方法的候选者:

public static class SaleExtensions
{
public static double Calculation(this Sale sale)        
{
// Obtain Total from _Context.History on Date
// Perform Calculation
}
}

它可能存在于您的DAL项目中。如果您需要将任何额外的房产保留在Sale中进行计算,只需用[NotMapped]标记即可,这样EF就会忽略它们。

最新更新