11

我有两个相关的类,它们共享一个公共接口,并且都存储在同一个底层数据库表中。但是,Entity Framework 生成一个公共类,我确实需要两个不同的类。我该如何解决这个问题?最好使用基类而不是接口吗?如何更改 EF 模型以提供映射在一张表上的两个类?

编辑: 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; }
}
4

1 回答 1

14

这些数据有区别吗?即 AccountType 是否定义了它是哪种类型?如果是这样的话:

  • EF 应该从存储中创建 Account 实体
  • 然后创建 2 个子类(UserAccount 和 GroupAccount)
  • 在 Account 的映射中,指定谓词“添加条件”
    • 让它映射到 AccountType(存储)字段为 1(或其他)的 UserAccount
    • 让它映射到 GroupAccount,其中 AccountType(存储)字段为 2(或其他)

然后帐户类型应该从帐户对象中完全消失(如果没有,则取消映射)。要仅获取 UserAccount 记录,请使用

 .Accounts.OfType<UserAccount>()...

Account 类在这个模型中应该是抽象的。接口的东西可以通过部分类添加 - 即在一个单独的文件中,定义:

partial class Account : IAccount {
   // extra code here
}

ETC

一个合理的演练在这里

于 2008-12-09T16:09:32.697 回答