2

如何在 Entity Framework 中管理以下两个表:


命令

  • 订单编号
  • 产品编号
  • 日期


订单存档

  • 订单编号
  • 产品编号
  • 日期

在此模式中,订单会定期从表 Order 转移到表 OrderArchive... 按类型表和按层次结构表似乎都不适合我的需要...我想为两种对象类型共享相同的方法。

请注意,我无法更改数据库架构。感谢您的帮助。

4

1 回答 1

1

好吧,如果你不能改变数据库模式,......你有一个巨大的限制!

如果你能改变它,我会做一个(抽象的)OrderBase类,用通用的属性和方法,并OrderOrderArchive它继承。

但如果你不能,我唯一看到的(有人可能有更好的主意)将是

创建一个接口 IOrder

public Interface IOrder {
   int OrderId {get;set;}
   int ProductId {get;set;}
   int Date {get;set;}
}

制作OrderOrderArchive实施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);
    }
}

但当然,在这种情况下,继承会更简洁。

编辑 也许寻找每个具体类型的表:您可能能够从一个抽象类继承,该类不会映射到数据库中,并且您的数据库不会被更改。

使用 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 回答