EFコードファーストで使用するこれら2つのPOCOクラスを検討してください。
public class Sale
{
public int SaleId { get; set; }
public DateTime Date { get; set; }
public double Amount { get; set; }
}
public class History
{
public int HistoryId { get; set; }
public DateTime Date { get; set; }
public double Total { get; set; }
}
それはすべてうまくいっていますが、実際には、アプリケーションで使用しているときに、クラスがより多くを表すようにしたいです。
public class SaleWithAllIWant
{
public int SaleId { get; set; }
public DateTime Date { get; set; }
public double Amount { get; set; }
public double Calculation // Read only and NOT stored in DB
{
get
{
// Obtain Total from _Context.History on Date
// Perform Calculation
}
}
}
EFの美しさを活かして、次のようなことができるようになりたいです。
gridSales.DataSource = _Context.Sales.ToList();
ただし、セールには私の情報がすべて含まれているわけではありません。SaleWithAllIWantはコンテキストではないので、SaleからSaleWithAllIWantにすべてを取得するには、なんらかのポストブッチャリングを行う必要があります。バインドされていない列などを使用できますが、乱雑になり、パフォーマンスに影響を及ぼし始めます。
計算には履歴コンテキストの知識が必要なため、SaleWithAllIWantをPOCOクラスに入れることはできません。私のDALプロジェクト(DbSetを作成する)は私のモデルプロジェクト(POCOクラスを保持する)を参照します。そのため、モデルプロジェクトは、循環参照であるため、コンテキストにアクセスするためにDALを参照できません。
個別のDALプロジェクトとモデルプロジェクトを持たずに、すべてをまとめるだけの解決策はありますか?
私が行方不明になっているより良い方法があると思います。すべてのコメントは大歓迎です。