非常に単純なwinformアプリケーションを構築して、いくつかの異なるシステムから同様のデータをロードし、そのデータを異なるビュー/レポートに表示しようとしています。Entity Frameworkを初めて使用していますが、これらの「レポート」ビューがORMフレームワークにどのように適合するかわかりません。
モデルは非常に基本的であり、 Tradeと呼ばれる基本抽象クラスは、システム固有のデータを持ついくつかの具象クラスとして実装されます。これだけ理解しており、ユーザーが追加のフィールドを表示したい場合は、基本クラスまたは具体的な実装(SystemATradeなど)として表示されるデータグリッド内のすべての取引を表示できます(このSOの質問に感謝します)。
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や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();
そのコードは現在私のビジネスロジックレイヤーに存在し、リストをDataGrid.DataSourceに割り当てるUIレイヤーにリストを返します。動作しますが、正しくないようです。linqクエリに埋め込まれた匿名型のPOCOを作成し、このロジックをDALに移動することをお勧めしますか?それはEDMXファイルで実行され、CodeFirst POCOと並行して実行できますか?
二次:可能であれば、BaseTrade / SystemATradeに似たポリモーフィックレポートを作成し、ユーザーがレポートをBaseTradeだけでなくSystemATradeとして表示したい場合は、追加の継承フィールドを含めたいと思います。