データベース スキーマを変更できない場合は、大きな制限があります。
それを変更できるのであればOrderBase
、共通のプロパティとメソッドを使用して (抽象) クラスを作成し、それを作成Order
してOrderArchive
継承します。
しかし、それができない場合、私が見る唯一のもの (誰かがより良いアイデアを持っているかもしれません)
インターフェイス IOrder を作成する
public Interface IOrder {
int OrderId {get;set;}
int ProductId {get;set;}
int Date {get;set;}
}
作成Order
およびOrderArchive
実装IOrder
(データベース スキーマは変更されません)
共通のメソッドを持つヘルパー クラスを作成します。
public static class IOrderHelper {
//a fake method
public static IList<IOrder> GetOrderByDate(IEnumerable<IOrder> orderList, DateTime dt) {
return orderList.Where(m => m.Date.Date == dt);
}
}
しかしもちろん、この場合、継承はよりクリーンになります。
EDIT
コンクリート型ごとのテーブルを探すかもしれません:抽象クラスから継承できる可能性がありますが、これは db にマップされず、データベースは変更されません。
Code Firstでは、あなたがしなければならないでしょう
modelBuilder.Entity<Order>()
.Map(m =>
{
m.ToTable("Orders");
m.MapInheritedProperties();
});
modelBuilder.Entity<ArchiveOrder>()
.Map(m =>
{
m.ToTable("ArchiveOrders");
m.MapInheritedProperties();
});
しかし、何を使用しているのかわかりません (CodeFirst、ModelFirst、DatabaseFirst) ?