例如,如果我有一个模型:
public class BasePolicy {
public int Id { get; set; }
public string Name { get; set; }
}
public class PaymentPolicy : BasePolicy {
public string PaymentMethod { get; set; }
}
public class ReturnPolicy : BasePolicy {
public int ReturnTerm { get; set; }
}
...并且想要创建具有下一个要求的codefirst数据库和存储库:
Id
)中按BasePolicy
检索基本实体的能力。这对于管理索引页面是必要的,该页面仅按其名称显示策略列表。PaymentMethod
选择来访问儿童特定属性(PaymentPolicy
,如果它是Id
- 等)。这是编辑操作所必需的。最好的方法是什么?我应该为每种子类型创建单独的表吗??
public class Database : DbContext
{
public DbSet<PaymentPolicy> PaymentPolicies { get; set; }
public DbSet<ReturnPolicy> ReturnPolicies { get; set; }
}
+ 数据按逻辑排序
- 如果没有加入这些表并在select查询中指定策略类型,我将无法通过它的唯一ID获取BasePolicy
个实体。这就是为什么我应该向基类型注入一些PolicyType
枚举并实现存储库方法,它将获得BasePolicy
类型(以确定从哪个表中获取)并且只有这样通过唯一Id
- 和向下转发BasePolicy
到特定子类型政策。这是我刚刚使用的解决方案。
...我应该彻底删除继承吗?
public class PaymentPolicy {
public int Id { get; set; }
public string Name { get; set; }
public string PaymentMethod { get; set; }
}
public class ReturnPolicy {
public int Id { get; set; }
public string Name { get; set; }
public int ReturnTerm { get; set; }
}
+ 数据仍按逻辑排序
- 我仍然无法通过它的唯一身份获取BasePolicy
实体。
...我应该将子类型作为导航属性添加到基本类型吗?
public class BasePolicy {
public int Id { get; set; }
public string Name { get; set; }
public PaymentPolicy PaymentPolicy { get; set; }
public ReturnPolicy ReturnPolicy { get; set; }
}
public class PaymentPolicy {
public string PaymentMethod { get; set; }
}
public class ReturnPolicy {
public int ReturnTerm { get; set; }
}
- 这将破坏逻辑模型结构
+ 我将能够获得没有冗余连接的策略列表
+ 它将提供强大的一对一关系
还是有一些更高级的策略和技巧?