如何在 Entity Framework 中管理以下两个表:
命令
- 订单编号
- 产品编号
- 日期
和
订单存档
- 订单编号
- 产品编号
- 日期
在此模式中,订单会定期从表 Order 转移到表 OrderArchive... 按类型表和按层次结构表似乎都不适合我的需要...我想为两种对象类型共享相同的方法。
请注意,我无法更改数据库架构。感谢您的帮助。
如何在 Entity Framework 中管理以下两个表:
和
在此模式中,订单会定期从表 Order 转移到表 OrderArchive... 按类型表和按层次结构表似乎都不适合我的需要...我想为两种对象类型共享相同的方法。
请注意,我无法更改数据库架构。感谢您的帮助。
好吧,如果你不能改变数据库模式,......你有一个巨大的限制!
如果你能改变它,我会做一个(抽象的)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);
}
}
但当然,在这种情况下,继承会更简洁。
编辑 也许寻找每个具体类型的表:您可能能够从一个抽象类继承,该类不会映射到数据库中,并且您的数据库不会被更改。
使用 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)?