2012-11-15 23 views
4

我想構建一個相當簡單的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查看報表,那麼包含附加的繼承字段。

回答

0

你能解釋一下爲什麼查詢返回的數據不正確嗎?這將有助於指出問題。是的,您可以創建一個POCO以使其更易於維護,但如果查詢存在缺陷,那麼創建POCO不會修復它。

+0

返回的查詢和數據是正確的,我只是想知道是否將它作爲匿名類型返回是最佳做法,或者如果我應該爲每個報表創建特殊的POCO類 – Jamie

+0

POCO類會更好,因爲然後編譯器將幫助您捕獲在編譯時打破依賴關係。如果你在團隊中工作,這會有所幫助。 – Yogiraj