1

我想为我的用户对象创建一个派生类,它有一些额外的属性(登录用户类),但是当我从数据库中获取用户时,实体框架会返回派生类。这是不需要的。派生类没有无参数构造函数,只能作为登录的包装器创建。所以我将其添加到 onCreateModel:"

modelBuilder.Ignore<LoginUser >();

但是现在当我尝试存储或引用我的 LoginUser 对象时,它会抛出一个异常,指出该实体没有映射 (LoginUser)。如何使实体框架使用基类的映射?

这是我的课:

public class User
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Role { get; set; }
}



public class LoginUser : User, IPrincipal
{
    private IPrincipal underlayingPrincipal;

    public IIdentity Identity 
    {
        get
        {
            return this.underlayingPrincipal.Identity;
        }
    }

    public LoginUser(IPrincipal principal, User user)
    {
        this.underlayingPrincipal = principal;
        this.Id = user.Id;
        this.Name = user.Name;
        this.Role = user.Role;
    }

    public bool IsInRole(string role)
    {
        return this.Role == role;
    }
}
4

1 回答 1

1

LoginUser 不应扩展 User;它应该是一个独立的类,当您检索/存储用户时,您将从/映射到用户。数据库模型类应该保留在数据库中,传递给视图的类应该独立于数据库模型并映射。

如果无论如何你想将你的用户类传递给模型,你可以只创建一个用户的部分类并添加互补的 inof(属性,接口......)

partial class User
{
  private IPrincipal underlayingPrincipal;
  public IIdentity Identity 
  {
    get
    {
        return this.underlayingPrincipal.Identity;
    }
  }

  public User(IPrincipal principal, User user)
  {
    this.underlayingPrincipal = principal;
    this.Id = user.Id;
    this.Name = user.Name;
    this.Role = user.Role;
  }

  public bool IsInRole(string role)
  {
    return this.Role == role;
  }
}
于 2013-06-23T13:42:51.373 回答