【发布时间】:2015-11-23 18:42:56
【问题描述】:
我正在使用 vs2013 并使用 asp.net mvc 5 来创建我的 Web 应用程序。为了进行个人身份验证,我使用 Identity 2.0。
当我创建我的 Entitymodel.edmx 时,它会自动在 web.config 中为我的数据库生成新的连接字符串,如下所示:
<add name="myEntities" connectionString="metadata=res://*/Models.mEntity.csdl|res://*/Models.mEntity.ssdl|res://*/Models.mEntity.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Shop.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
我想 Identity 使用代码优先的方法来制作数据库并连接到另一个连接字符串(DefaultConnection),例如:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-testauthentication-20151116011628.mdf;Initial Catalog=aspnet-testauthentication-20151116011628;Integrated Security=True"
providerName="System.Data.SqlClient" />
因此,当我第一次运行项目时,它会创建名为
的新 .mdf 文件aspnet-testauthentication-20151116011628.mdf
并在其中创建表格。但我想要的是让 Identity 连接到我已经创建的名为:Shop.mdf 的数据库并在其中创建它的表。所以我将我的连接字符串名称放在 IdentityModel.cs 中的ApplicationDbContext 类中,如下所示:
public ApplicationDbContext()
: base("myEntities", throwIfV1Schema: false)
{
}
但我收到以下错误:
实体类型 ApplicationUser 不是模型的一部分 当前上下文。
那么,这样做的适当和正确的方法是什么?
非常感谢
更新:
我在现有数据库中创建了完全相同名称的 Identity 表,并使用 DefaultConnection 连接到现有数据库,现在我收到此错误:
无法创建文件“c:\users\mohamad\documents\visual studio 2013\Projects\Shop\Shop\App_Data\Shop.mdf”,因为它已经存在。更改文件路径或文件名,然后重试该操作。 创建数据库失败。列出的某些文件名无法创建。
为什么当里面有数据库甚至表的时候,identity会尝试创建数据库??
解决方案:
第1点:似乎身份与连接到现有数据库没有问题,它可以很好地连接到它并在其上创建它的表。
第 2 点:我遇到的问题:我不知道问题的原因是什么,但我执行了以下步骤并解决了问题:
- 从 model.edmx 中删除所有表
- 删除model.edmx
- 也重新生成 edmx 模型和连接字符串,然后我在其中添加了表格
- DefalutConnection 字符串指向与实体连接字符串完全相同的 .mdf 文件。
- 运行项目并注册,一切顺利。
- 连接字符串中的初始目录应填写
如果您需要在 Identity 的现有属性(例如 name、City 和 ...)之外添加其他属性。请执行以下步骤并运行项目并注册:
-
在
IdentityModel.cs文件中将属性添加到ApplicationUser类中:public class ApplicationUser : IdentityUser { public string Adress { get; set; } public DateTime DateOfBirth { get; set; } .... } - 在
AccountViewModel.csRegisterViewModelclass 中添加完全相同的属性并分配它们的属性,如[Requierd]
-
在
AccountController.cs在Register操作中添加如下属性:var user = new ApplicationUser() { UserName = model.Email, Email = model.Email ,Adress=model.Adress}; 在注册视图中添加相关的html
干杯
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2