編集:この質問は時代遅れです
アイデンティティフレームワークは、私がこれを尋ねた瞬間に動いていました。著者はかなり多くのことを変更し、他のいくつかを切り離して、すべてを簡単にしました。
githubのAsp.NET Identityサンプルプロジェクト をご覧ください。
ユーザー管理が必要な小さなアプリケーションを作成しています。登録は許可されていません。代わりに、ログイン情報を作成および変更するスーパーユーザーがいます。
新しい ASP.NET Identity メンバーシップシステムを使用していますが、ユーザーの作成とロールの追加は簡単で直感的です。
さて、私の質問:生成されたAccountControllerクラスによって使用されるAuthenticationIdentityManagerクラスを使用してユーザーのリストを取得する方法は?コントローラーからユーザーリストにアクセスする方法が見つかりませんでした。
(ちなみに、新しい名前「Identity」は一部の人にとっては素晴らしい音に聞こえるかもしれませんが、検索するのは苦痛です。)
Edit:これをやろうとした場合
ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception
例外が発生しますInvalid column name 'Discriminator'
。 ApplicationDbContextの定義は、新しいアプリケーションウィザードによって自動的に生成されます。
using Microsoft.AspNet.Identity.EntityFramework;
namespace Cobranzas.Models
{
public class ApplicationUser : User
{
}
public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
{
}
}
したがって、Discriminator
列はApplicationUser
とUser
を区別するためのものだと思います。ただし、データベースには存在しません(アプリケーションによって自動的に作成されました)。
派生したApplicationUser
オブジェクトを何にも使用していないことがわかったので、先に進み、単純な古いUser
のすべての使用を変更しました。次に、次のApplicationDbContext
定義を変更しました。
public class ApplicationDbContext : IdentityDbContext<
User, UserClaim, UserSecret, UserLogin,
Role, UserRole, Token, UserManagement>
{
}
そして今、私はユーザーリストにアクセスできます:
UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();
しかし、私はこれが戻って来て私を悩ませると思う(おそらくUser
にさらにフィールドを追加する必要があるだろう)ので、おそらくこの質問と同じアプローチを使用する必要があります:
ASP.NET MVC5 IDシステムのすべてのロール名を取得
Edit:新しいプロパティを追加する必要があるので、変更を元に戻す必要がありました。そこで私は先に進み、ASP.NET Identityサンプルプロジェクトと1行ずつ比較しましたが、生成されたプロジェクトには次の行があることがわかりました。
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
一方、サンプルアプリケーションでは、コンストラクタにデータベースコンテキストが含まれていました。そこで、コンストラクタに追加し、データベースを再作成すると、問題はなくなりました。
IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
ASP .NET MVC5
プロジェクトを作成ASP .NET Identity
テーブルを適切に作成し、接続文字列も変更します。AccountController
Bに移動します。B.ダミーメソッドを作成してそこに配置します。var context = new ApplicationDbContext(); var allUsers = context.Users.ToList();
RTMの場合、DbContext
またはすべてのユーザーを列挙する特定のストア実装にドロップダウンする必要があります。次のリリースでは、おそらくストアが実装できるManagerクラスにオプションのIQueryable
Users/Rolesメソッドを追加して、ユーザーとストアの両方に対してIQueryables
を公開する予定です。
using System.Linq;
using System.Data;
using System.Data.Entity;
var db = new ApplicationDbContext();
var Users = db.Users.Include(u => u.Roles);
Constructor
Identity
で次のタイプのAccountController
を使用できる場合。
public AccountController(ApplicationUserManager userManager,
ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
UserManager = userManager;
AccessTokenFormat = accessTokenFormat;
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
UserManager
オブジェクトを直接使用して、次のようなユーザーリストを取得できます。
var userList= UserManager.Users.ToList();