如何管理实体框架中的以下两个表:
和
在此模式中,订单会定期从表Order转移到表OrderArchive ... Table Per Type和Table Per Hierarchy似乎都不符合我的需求......我想为两种对象类型共享相同的方法。
请注意,我无法更改数据库架构。 谢谢你的帮助。
答案 0 :(得分:1)
好吧,如果你不能改变数据库模式,......你有一个巨大的限制!
如果你可以改变它,我会使用常见的属性和方法做一个(抽象)OrderBase
类,并使Order
和OrderArchive
继承它。
但如果你不能,我唯一能看到的东西(有人可能有更好的想法)就是
创建一个接口IOrder
public Interface IOrder {
int OrderId {get;set;}
int ProductId {get;set;}
int Date {get;set;}
}
make 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);
}
}
但当然,在这种情况下,继承会更加清晰。
修改强> 也许查找每个具体类型的表:您可能能够从一个抽象类继承,该类不会在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)?