考虑将这两个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类中,因为计算需要了解History上下文。我的DAL项目(创建DbSets)引用了我的Model项目(它包含POCO类) - 因此Model项目不能引用DAL来访问上下文,因为它将是一个循环引用。
解决方案只是将它们全部打包在一起而没有单独的DAL和Model项目吗?
我怀疑我错过了一种更好的方式。所有评论都非常赞赏。
答案 0 :(得分:1)
将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忽略它们。