Class and Interface hierarchies in Entity Framework?

房东的猫 提交于 2019-12-03 10:20:01

问题


I have two related classes which share a common interface and are both stored in the same underlying database table. However, the Entity Framework generates one common class, where I really need the two distinct classes. How do I resolve this? Is it best to use a base class rather than an interface? How do I change the EF model to provide two classes mapped over one table?

Edit: the AccountType property determines the type of class; user or group.

Some simple code:

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; }
}

回答1:


Is this data discriminated? i.e. does AccountType define which type it is? If so:

  • EF should create the Account entity from the storage
  • you then create 2 subclasses (UserAccount and GroupAccount)
  • in the mapping for Account, specify a predicate "add a condition"
    • have it map to UserAccount where the AccountType (storage) field is 1 (or whatever)
    • have it map to GroupAccount where the AccountType (storage) field is 2 (or whatever)

The account type then should completely disappear from the Account object (unmap it if not). To get just the UserAccount records, you use

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

The Account class should probably be abstract in this model. The interface stuff can be added via a partial class - i.e. in a separate file, define:

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

etc

A reasonable walkthrough is here.



来源:https://stackoverflow.com/questions/353284/class-and-interface-hierarchies-in-entity-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!