我在项目中添加了一个数据库,然后我想添加一个控制器。
当弹出Add Controller窗口时,系统会要求我选择Data context class。
令人惊讶的是,我发现有2个上下文类: 一个叫做:my_database_name_dbEntities(projectname)
另一个叫做:
ApplicationDbContext(projectname.Models) 这是我在添加连接到我的数据库的Entity Framework对象时创建的。
我很担心
这是截图
更新
我尝试了他们两个,这就是我所拥有的:
错误
运行所选代码生成器时出错:
'无法检索'lrc.Event'的元数据。一个或多个验证 在模型生成期间检测到错误:
AspNetUserLogin :: EntityType'AspNetUserLogin'没有定义键。 定义此EntityType的密钥。
AspNetUserLogins:EntityType:EntitySet'AspNetUserLogins'基于 输入没有定义键的'AspNetUserLogin'。
更新
现在,我将超级类从DbContext更改为IdentityDbContext,用于projectname_dbEntities。 所以现在看起来像这样:
public partial class projectname_dbEntities : IdentityDbContext<ApplicationUser>
{
public projectname_dbEntities()
: base("projectname_dbEntities", throwIfV1Schema: false)
//: base("name=projectname_dbEntities")
{
}
public static projectname_dbEntities Create()
{
return new projectname_dbEntities();
}
.....
}
我想知道:
使用IdentityDbContext中的派生类相对于DbContext有什么好处?
答案 0 :(得分:1)
开箱即用,当您使用Visual Studio 2013中的默认模板创建ASP.NET MVC 5项目时,您将获得一个基本的,可立即运行的网站,其中已有基本的身份和帐户管理类。
有一个班级ApplicationDbContext
。这是实体框架上下文,用于管理应用程序与持久保存帐户数据的数据库之间的交互(可能或可能不是我们的应用程序其余部分将使用的数据库),此类继承自{ {1}}。
IdentityDbContext
基本上是常规IdentityDbContext
,有两个DbContext
。一个用于DbSets
,另一个用于Users
。
如果您不想使用Roles
,可以忽略它或将其混合到您自己的ASP.NET Identity
课程中。