我想構建一個相當簡單的winform應用程序來加載來自幾個不同系統的類似數據,然後在不同的視圖/報告中顯示數據。我第一次使用Entity Framework,我不確定這些「報告」視圖如何適合ORM框架。顯示EF實體的自定義視圖
該模型是非常基本的,一個名爲的基本抽象類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() { }
}
現在我想添加如TradeDate自聯接及交易數量,以顯示與此類似相關行業的一些自定義視圖:
_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();
該代碼當前存在於我的業務邏輯層和將列表返回給將該列表分配給DataGrid.DataSource的UI層。它有效,但看起來不正確。是否最好爲linq查詢中嵌入的匿名類型創建POCO並將此邏輯移至DAL?這是用EDMX文件完成的,可以和CodeFirst POCO平行嗎?
次要:如果可能的話,我希望做一個類似於BaseTrade/SystemATrade的多態報告,如果用戶更願意將報告視爲SystemATrade而不是BaseTrade查看報表,那麼包含附加的繼承字段。
返回的查詢和數據是正確的,我只是想知道是否將它作爲匿名類型返回是最佳做法,或者如果我應該爲每個報表創建特殊的POCO類 – Jamie
POCO類會更好,因爲然後編譯器將幫助您捕獲在編譯時打破依賴關係。如果你在團隊中工作,這會有所幫助。 – Yogiraj