gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:41 25 4
gpt4 key购买 nike

考虑将这两个 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 的所有内容。我可以使用未绑定(bind)的列或类似列,但它会变得困惑并开始影响性能。

我不能只将 SaleWithAllIWant 放在我的 POCO 类中,因为计算需要历史上下文的知识。我的 DAL 项目(它创建了 DbSet)引用了我的模型项目(它包含 POCO 类)——因此模型项目无法引用 DAL 来访问上下文,因为这将是一个循环引用。

解决方案是将它们全部捆绑在一起而不使用单独的 DAL 和模型项目吗?

我怀疑我缺少更好的方法。非常感谢所有评论。

最佳答案

如果您不单独部署它们,那么将 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 就会忽略它们。

关于c# - 扩展 POCO 类以使用其他上下文进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com