我有两个相关的类,它们共享一个公共接口,并且都存储在同一个基础数据库表中。然而,实体框架生成一个公共类,而我确实需要两个不同的类。我该如何解决这个问题?最好使用基类而不是接口吗?如何更改 EF 模型以提供映射到一张表的两个类?
Edit:AccountType 属性决定类的类型;用户或组。
一些简单的代码:
public interface IAccount
{
string Name { get; set; }
AccountType AccountType { get; set; }
}
public class GroupAccount : IAccount
{
public string Name { get; set; }
public GroupType GroupType { get; set; }
public AccountType AccountType { get; set; }
}
public class UserAccount : IAccount
{
public string Username { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public AccountType AccountType { get; set; }
}
这些数据是否存在歧视?即 AccountType 定义它是什么类型?如果是这样:
- EF 应从存储创建帐户实体
- 然后创建 2 个子类(UserAccount 和 GroupAccount)
- in the mapping for Account, specify a predicate "add a condition"
- 将其映射到 UserAccount,其中 AccountType(存储)字段为 1(或其他值)
- 将其映射到 GroupAccount,其中 AccountType(存储)字段为 2(或其他值)
然后,帐户类型应该从帐户对象中完全消失(如果没有,则取消映射)。要仅获取 UserAccount 记录,您可以使用
.Accounts.OfType<UserAccount>()...
在此模型中,Account 类可能应该是抽象的。接口内容可以通过分部类添加 - 即在单独的文件中定义:
partial class Account : IAccount {
// extra code here
}
etc
合理的演练是here http://weblogs.asp.net/zeeshanhirani/archive/2008/08/16/single-table-inheritance-in-entity-framework.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)