我正在使用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 使用Code First方法创建数据库,并连接到另一个连接字符串(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" />
因此,当我第一次运行项目时,它会创建一个名为 aspnet-testauthentication-20151116011628.mdf 的新.mdf文件并在其中创建表。但我想让 Identity 连接到我已经创建的名为:Shop.mdf的数据库,并在其中创建它的表。因此,我将我的连接字符串名称放在 IdentityModel.cs 中的 ApplicationDbContext
类中,就像这样:
public ApplicationDbContext()
: base("myEntities", throwIfV1Schema: false)
{
}
但我得到了以下错误:
实体类型ApplicationUser不是当前上下文模型的一部分。
那么做这件事情的适当和正确的方法是什么?
非常感谢
更新:我在现有数据库中使用相同的名称完全创建了身份表,将DefaultConnection连接到现有数据库,现在我收到了此错误:
无法创建文件“ c:\ users \ mohamad \ documents \ visual studio 2013 \ Projects \ Shop \ Shop \ App_Data \ Shop.mdf”,因为它已经存在。更改文件路径或文件名,然后重试操作。CREATE DATABASE failed.列出的一些文件名无法创建。
为什么在有数据库甚至其中一个表的情况下,标识都会尝试创建数据?
解决方案:
1点:看起来标识没有与连接到已经存在的数据库有问题,它可以很好地连接到它并在其上创建它的表。
2点:我遇到的问题:我不知道我的问题是什么,但我按照以下步骤执行,问题得到解决:
删除model.edmx中的所有表 删除model.edmx 重新生成edmx模型以及连接字符串,然后将表添加到其中 DefalutConnection字符串指向与Entity Connection字符串完全相同的.mdf文件。 运行项目并注册,一切都很好。 连接字符串中的“初始目录”应该填写
如果您需要除Identity的现有属性(如名称,城市等)之外添加其他属性,则执行以下步骤,然后运行项目并注册:
在IdentityModel.cs文件中将属性添加到ApplicationUser类: public class ApplicationUser:IdentityUser { public string Adress {get;set;} public DateTime DateOfBirth {get;set;} .... } 在AccountViewModel.cs中,在RegisterViewModel类中添加完全相同的属性,并分配其属性,如[Requierd] 在AccountController.cs中,在Register操作中添加属性,例如:
var user = new ApplicationUser(){UserName=model.Email,Email=model.Email,Adress=model.Adress }; 添加与注册视图相关的HTML
干杯
UserStore<IdentityUser> userStore = new UserStore<IdentityUser>(); userStore.Context.Database.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
然后 Identity 会在我的数据库中生成表。我只想将它们放在现有的数据库中,而不是在 .edmx 模型中,我相信一定有办法。 - M.Armoun