我正在尝试做与下面问题的海报相同的事情,即从ASP.NET Identity共享用户数据库,并将其用于在另一个Windows窗体应用程序中的用户登录。
ASP.NET标识登录
我的问题是该链接中给出的响应的后续问题:如何确保windows窗体中的Microsoft.Identity.EntityFramework连接到我的ASP.NET用户数据库?也就是说,我如何检查它的连接字符串以确保它是正确的数据库?
或者有更好或更直观的方法在Windows窗体中实现.NET标识吗?
如果这个问题显得多余,我深表歉意。但我在这件事上真的很难过,任何解释都非常感谢。
感谢
老问题,但没有答案。
如何检查它的连接字符串以确保它是正确的数据库?
将ADO.NET Entity Data Model
添加到包含到IdentityDatabase的连接的项目中。
它将为4个表生成POCO类和一个上下文类
AspNetRole
AspNetUser
AspNetUserClaim
AspNetUserLogin
检查连接性:
对于名为WebFormsIdentityEntities
:的上下文类
WebFormsIdentityEntities context = new WebFormsIdentityEntities();
Console.WriteLine(context.AspNetUsers.Count());
它应该返回数据,否则会引发连接错误异常。
为什么不在WinForm项目上创建一个新的上下文?链接,或创建一个DLL库用于连接到数据库,然后在您的两个项目中引用此库
我今天也有类似的项目。我有一个ASP.Net-MVC和一个WinForm项目,还有一个上下文和模型库,我做了一个包含模型、迁移和上下文的库。然后,我在两个项目中添加了对库的引用,我唯一要做的就是在App.Config或Web.Config的两个项目添加连接字符串,并添加对EntityFramework和Asp.net-identity NugetPackages的引用。
这是我在WinForm上验证登录的代码,在程序类上是无效的
public ApplicationUserManager UsrMan = new ApplicationUserManager(new ApplicationUserStore(new libProduccionDataBase.Contexto.DataBaseContexto()));
public void CheckLogin( bool change = false )
{
using (var loginfrm = new LogInForm())
{
if (loginfrm.ShowDialog() == DialogResult.OK)
{
var t = Auxiliares.Validate(loginfrm.Response);
if (t.isValid &&
UsrMan.FindByName( loginfrm.Response.UserName ) != null &&
UsrMan.CheckPassword( UsrMan.FindByName( loginfrm.Response.UserName ), loginfrm.Response.Password )
)
{
Program.User = UsrMan.FindByName( loginfrm.Response.UserName );
}
else
{
if (!t.isValid)
{
var str = new System.Text.StringBuilder();
t.Result.ToList().ForEach( err =>
{
str.AppendFormat( "• {0}n", err.ErrorMessage );
} );
MessageBox.Show( str.ToString(), "Error...", MessageBoxButtons.OK, MessageBoxIcon.Error );
}
CheckLogin();
}
}
else
{
if (!change) ExitThread();
}
}
}
这是userManager:的类
public class ApplicationUserManager : UserManager<ApplicationUser, int>
{
public ApplicationUserManager( IUserStore<ApplicationUser, int> store ) : base( store ){}
}
以及userStore(我使用它是因为我将用户的id
个性化为int
):
public class ApplicationUserStore : UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public ApplicationUserStore(Contexto.DataBaseContexto context) : base(context)
{
}
}