为什么在EF中创建控制器时我有2个数据上下文类

时间:2015-04-06 02:44:14

标签: c# entity-framework

我在项目中添加了一个数据库,然后我想添加一个控制器。

当弹出Add Controller窗口时,系统会要求我选择Data context class。

令人惊讶的是,我发现有2个上下文类: 一个叫做:my_database_name_dbEntities(projectname)

另一个叫做:

ApplicationDbContext(projectname.Models) 这是我在添加连接到我的数据库的Entity Framework对象时创建的。

我很担心

  1. 使用哪一个
  2. 有什么不同
  3. 这是截图 enter image description here


    更新

    我尝试了他们两个,这就是我所拥有的:

    1. 如果我选择databasename_dbEntities,VS会完美地生成视图和控制器,没有任何问题。
    2. 如果我选择ApplicationDbContext,VS会抛出错误:
    3.   

      错误

           

      运行所选代码生成器时出错:

           

      '无法检索'lrc.Event'的元数据。一个或多个验证   在模型生成期间检测到错误:

           

      AspNetUserLogin :: EntityType'AspNetUserLogin'没有定义键。   定义此EntityType的密钥。

           

      AspNetUserLogins:EntityType:EntitySet'AspNetUserLogins'基于   输入没有定义键的'AspNetUserLogin'。

           

      enter image description here

      更新

      现在,我将超级类从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有什么好处?

1 个答案:

答案 0 :(得分:1)

开箱即用,当您使用Visual Studio 2013中的默认模板创建ASP.NET MVC 5项目时,您将获得一个基本的,可立即运行的网站,其中已有基本的身份和帐户管理类。

有一个班级ApplicationDbContext。这是实体框架上下文,用于管理应用程序与持久保存帐户数据的数据库之间的交互(可能或可能不是我们的应用程序其余部分将使用的数据库),此类继承自{ {1}}。

IdentityDbContext基本上是常规IdentityDbContext,有两个DbContext。一个用于DbSets,另一个用于Users

如果您不想使用Roles,可以忽略它或将其混合到您自己的ASP.NET Identity课程中。