2

Entity Framework で次の 2 つのテーブルを管理するにはどうすればよいですか。


注文

  • オーダーID
  • 製品番号
  • 日にち


オーダーアーカイブ

  • オーダーID
  • 製品番号
  • 日にち

このスキーマでは、注文はテーブル Order からテーブル OrderArchive に定期的に転送されます... Table Per Type も Table Per Hierarchy も私のニーズに合わないようです... 両方のオブジェクト タイプで同じメソッドを共有したいと考えています。

データベース スキーマを変更できないことに注意してください。ご協力ありがとうございました。

4

1 に答える 1

1

データベース スキーマを変更できない場合は、大きな制限があります。

それを変更できるのであれば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) ?

于 2012-10-18T13:25:21.037 に答える