2015-12-14 50 views
13

私は、IdentityのMicrosoft.AspNet.Identity.EntityFrameworkプロジェクト(v 2.0.0.0)を、その永続性マシンとしてNHibernateを使用するものに変換しようとしています。私の最初の「つまずき」はUserStoreクラスのリポジトリのセットです:なぜASP.NET IDの `UserStore`に非常に多くのリポジトリがありますか?

Typeパラメータ TUserIdentityUser<TKey, TUserLogin, TUserRole, TUserClaim>に拘束され、このタイプは、コレクションの独自の同様のセット持っている
private readonly IDbSet<TUserLogin> _logins; 
private readonly EntityStore<TRole> _roleStore; 
private readonly IDbSet<TUserClaim> _userClaims; 
private readonly IDbSet<TUserRole> _userRoles; 
private EntityStore<TUser> _userStore; 

public virtual ICollection<TRole> Roles { get; private set; } 
public virtual ICollection<TClaim> Claims { get; private set; } 
public virtual ICollection<TLogin> Logins { get; private set; } 

をマイこれらのユーザーのそれぞれがすでに自分のものを世話しているので、TUserのリポジトリを1つだけ管理しなければならない場合、人生はずっと簡単になります。 DbSetのようなEntity Frameworkの依存関係を取り除くために重要な理由はありますか?

DbSetの代わりに独自のリポジトリクラスを考案できましたしばらくICollectionUserStoreが、私は非常にちょうどそれらを失い、各ユーザーインスタンスは、独自の主張の世話を聞かせすることを好むなど

+0

Identity Frameworkで他のデータベーステクノロジを使用する例は多数あります。 EFはプロバイダの唯一のものです。例えば、すでに存在するnHibernateサンプルが4つあります。http://www.nuget.org/packages?q=Tags%3A%22Identity%22+Tags%3A%22nhibernate%22 - ソースコードそれらのいくつかに。例えば:https://github.com/MatthewRudolph/Airy –

+1

Hnibernateのために見つけた最初の、最も顕著なプロジェクトは、文字列キーを使用しなければなりませんでした。そうでなければ完全に汎用的なシステムでは、私は受け入れられない標準を見つけました。私たちの既存のNHibernateカスタムDALをアイデンティティの永続性のために使用しています。私はもちろん、あなたがインスピレーションのために引用した例を見ていきます。ありがとう。 – ProfK

答えて

6

の追加DbSetクラスは、ユーザーの主張、役割とログインに関連する永続データのためのものですフィールドは、現在選択されているユーザーを介してこれらのテーブルからデータを読み込むためのナビゲーションプロパティです。

アイデンティティ・フレームワーク(そして神のスピード)を完全に変換しようとするなら、これらのデータベース・エンティティがこのデータを管理する必要があります。

あなたは、しかし、それは少し簡単にするために彼らの主張、役割とログインへのアクセスを公開する単一Userのリポジトリを持つことができます。

+0

そのシングルユーザーリポジトリは、なぜ私が最初に使用しなかったのか不思議です。 "あなたに神のスピード" - ありがとう、これは非常に興味深く、挑戦的な仕事です。私は初めてNHibernateを使ったことがあります。 – ProfK

+0

あなたは 'UserStore'を意味しますか?私は、これは、リポジトリよりもサービスクラスで、すべてのユーザ情報を処理するメソッドを公開すると考えています。 – Steve

+0

「UserStore」内に単一のユーザリポジトリがないのはなぜですか?彼らはすでに 'DbSet'に基づいて' EntityStore 'という1つのユーザリポジトリを持ち、EFではユーザのリポジトリを読み込んで保存しています関連するコレクションはすべて 'DbContext'と' DbSet'で扱うことができます。なぜなら、それらがすべてのユーザオブジェクトコレクションに対しても 'リポジトリ'を持たなければならない理由は何ですか? – ProfK

関連する問題