我说过我会发布一些东西来解释我是如何设法让它工作的。我很难找到一些关于将 Identity 与 Model First 方法结合使用的文档和教程,所以它来了。
首先,我找到了 Ben Foster 的这篇天才文章:http://benfoster.io/blog/aspnet-identity-stripped-bare-mvc-part-1
本文讨论了如何实现“身份剥离裸露”。阅读它并按照步骤操作让我了解了如何从头开始使用身份(您可以在开始时看到他生成了一个没有身份验证系统的 MVC 5 项目)。
如果你想要这个“裸体身份”的代码,这里是:https://github.com/benfoster/NakedIdentity
第一步是生成数据库。在 Naked Identity 代码中,使用了 v1.0 的 Identity。有些东西是不同的(例如几个表属性),但它基本上是相同的。
要创建 Identity 可用的数据库,我只需运行模板 MVC 5 项目,为要使用 Code First 方法创建的表注册一个用户,然后将 Identity 所需的那些表复制到我的空数据库中。
完成后,我使用新创建的数据库生成了我的 .edmx。一个连接字符串被添加到 web.config。连接字符串可能已作为“DefaultConnection”存在。你也需要保留这个。
基本上,这两个连接字符串是必需的,因为 Identity 将使用默认的一个,而 .edmx 将使用另一个。由于 .edmx 连接字符串需要元数据,而身份不支持这些元数据,因此不可能对两者使用相同的。因此,这 2 个连接字符串是不同的,但我对其进行了修改,以便它们可以引用同一个数据库。
<connectionStrings>
<add name="DefaultConnectionString" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DatabaseName; Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="EntitiesConnectionString" connectionString="metadata=res://*/Models.WebAppModel.csdl|res://*/Models.WebAppModel.ssdl|res://*/Models.WebAppModel.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDb)\v11.0;initial catalog=DatabaseName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
第一个连接字符串是您要与实体一起使用的连接字符串。下面是 IdentityDbContext 的初始化方式:
``
公共类 AppDbContext : IdentityDbContext
{
公共 AppDbContext() : base("QualityWebAppDbEntitiesDefault", throwIfV1Schema: false)
{
}
public static AppDbContext Create()
{
return new AppDbContext();
}
}
``
(您可以在 NakedIdentity 源中找到 AppUser 定义)
对于我的 .edmx,初始化如下所示:
public partial class QualityWebAppDbEntities : DbContext
{
public QualityWebAppDbEntities()
: base("name=QualityWebAppDbEntities")
{
}
}
希望这将帮助那些想要在 Identity 中使用 Model First 方法的人。