1

追加のプロパティ (LoginUser クラス) を持つ User オブジェクトの派生クラスを作成したいのですが、データベースから User をフェッチすると、エンティティ フレームワークが派生クラスを返します。これは望ましくありません..派生クラスにはパラメーターのないコンストラクターがなく、ログインのラッパーとしてのみ作成する必要があります..だから私は 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 を拡張すべきではありません。ユーザーを取得/保存するときにユーザーから/へマップする独立したクラスである必要があります。データベース モデル クラスはデータベースにとどまる必要があり、ビューに渡すクラスはデータベース モデルから独立してマップされている必要があります。

とにかく User クラスをモデルに渡したい場合は、 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 に答える