【问题标题】:Displaying custom views with EF Entities使用 EF 实体显示自定义视图
【发布时间】:2012-11-15 21:18:42
【问题描述】:

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

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

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() { }

}

现在我想添加一些自定义视图,例如自加入 Trades on TradeDate 和 Quantity 以显示与此类似的相关交易:

_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 并行吗?

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

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

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

    【讨论】:

    • 返回的查询和数据是正确的,我只是想知道是否将其作为匿名类型返回是最佳做法,或者我是否应该为每个报告创建特殊的 POCO 类
    • POCO 类会更好,因为编译器将帮助您在编译时捕获破坏性依赖项。如果您在团队中工作,这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多