c# - 使用 EF 实体显示自定义 View

标签 c# entity-framework

我正在尝试构建一个相当简单的 winform 应用程序,以从多个不同的系统加载类似的数据,然后在不同的 View /报告中显示数据。我是第一次使用 Entity Framework,我不确定这些“报告” View 如何适合 ORM 框架。

该模型非常基础,名为Trade 的基本抽象类被实现为几个具有系统特定数据的具体类。我明白这一点,并且我可以在数据网格中显示所有交易,显示为基类或具体实现(例如 SystemATrade ),如果用户想要查看其他字段(感谢这个 SO question )。

public abstract class BaseTrade
{
    [Key, Column(Order=0)]
    public string SourceSystem { get; set; }
    [Key, Column(Order = 1)]
    public string TradeID {get; set;}

    public DateTime TradeDate { get; set; }
    public string Buy_Sell { get; set; }
    public decimal Quantity { get; set; }
    public decimal Price { get; set; }
}

public partial class SystemATrade : Trade
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}

public partial class SystemBTrade : Trade
{
    public string Field3 { get; set; }
    public string Field4 { get; set; }
}

public class TradeComplianceContext : DbContext
{
    public DbSet<BaseTrade> Trades { get; set; }

    public TradeComplianceContext() { }

}

现在我想添加一些自定义 View ,例如在 TradeDate 和 Quantity 上自联接 Trades 以显示与此类似的相关交易:

_context = new TradeComplianceContext();
var query = from t1 in _context.Trades
    join t2 in _context.Trades on
    new
    {
        Quantity = t1.Quantity,
        TradeDate = t1.TradeDate
    } equals
    new
    {
        Quantity = t2.Quantity,
        TradeDate = t2.TradeDate
    }
    where
    t1.Buy_Sell.Equals("P") && t2.Buy_Sell.Equals("S")
    select new
    {
        t1.SourceSystem,
        t1.TradeDate,
        t1.Quantity,
        t1.TradeID,
        t1.Price,
        t1.TraderID,
        t1.TraderName,
        T2_TradeID = t2.TradeID,
        T2_Price = t2.Price,
        T2_TraderID = t2.TraderID,
        T2_TraderName = t2.TraderName
    };

return query.ToList();

该代码当前存在于我的业务逻辑层中,并向 UI 层返回一个列表,该 UI 层将列表分配给 DataGrid.DataSource。它有效,但似乎不正确。是否更愿意为 linq 查询中嵌入的匿名类型创建一个 POCO 并将此逻辑移动到 DAL?这会用 EDMX 文件完成吗?它可以与 CodeFirst POCO 并行吗?

次要:如果可能的话,我喜欢做一个类似于 BaseTrade/SystemATrade 的多态报告,如果用户更愿意将报告视为 SystemATrade 而不仅仅是 BaseTrade,则包括额外的继承字段。

最佳答案

你能解释一下为什么查询返回的数据不正确吗?这将有助于指出问题。是的,您可以创建一个 POCO 以使其更易于维护,但如果查询中存在缺陷,创建 POCO 将无法修复它。

关于c# - 使用 EF 实体显示自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406393/

相关文章:

c# - 如何在 C# 中不使用 bigint 来添加或减去非常大的数字?

c# - 保护 ASP.NET 和 SSL 中的 Cookie

C# lambda IN 子句错误

c# - 查找具有额外资格条件的所有匹配项

c# - 子线程结束后如何在主线程中运行一个方法?

c# - HttpClient PostAsJsonAsync 与 Newtonsoft.Json 不兼容

c# - X 已经包含 EntityFramework 的定义 Y? (简单数据库)

c# - linq 与实体按 desc 排序

c# - 在 Entity Framework 中更新实体的最佳方式

c# - 如何使用 Repository Pattern、Service Pattern、UnitOfWork、ORM(EF、NHibernate 等)用 ASP MVC 构建项目?