2

考虑将这两个 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 项目(创建 DbSet)引用了我的模型项目(包含 POCO 类)——因此模型项目不能引用 DAL 来访问上下文,因为它是循环引用。

解决方案是将它们全部组合在一起而没有单独的 DAL 和模型项目吗?

我怀疑我错过了更好的方法。非常感谢所有评论。

4

1 回答 1

1

如果您不单独部署它们,我绝对会考虑将 DAL 和模型合并在一起。

也就是说,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 将忽略它们。

于 2012-11-24T13:48:47.947 回答