gpt4 book ai didi

c# - 为什么在 EF 中创建 Controller 时有 2 个数据上下文类

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:46 26 4
gpt4 key购买 nike

我在我的项目中添加了一个数据库,然后我想添加一个 Controller 。

当“添加 Controller ”窗口弹出时,系统会要求我选择数据上下文类。

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

另一种叫做:

ApplicationDbContext(项目名称.模型)这是我在添加连接到我的数据库的 Entity Framework 对象时创建的。

我很困惑

  1. 使用哪个
  2. 有什么区别

这是截图 enter image description here


更新

我都试过了,这是我得到的:

  1. 如果我选择数据库名称_dbEntities,VS 会毫无问题地完美生成 View 和 Controller 。
  2. 如果我选择 ApplicationDbContext,VS 会抛出一个错误:

Error

There was an error running the selected code generator:

'Unable to retrieve metadata for 'lrc.Event'. One or more validation errors were detected during model generation:

AspNetUserLogin: : EntityType 'AspNetUserLogin' has no key defined. Define the key for this EntityType.

AspNetUserLogins: EntityType: EntitySet 'AspNetUserLogins' is based on type 'AspNetUserLogin' that has no keys defined.

'

enter image description here

更新

现在,我将 projectname_dbEntities 的父类(super class)从 DbContext 更改为 IdentityDbContext。所以现在看起来像这样:

    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 有什么优势?

最佳答案

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

有一个类 ApplicationDbContext。这是 Entity Framework 上下文,用于管理您的应用程序与保存帐户数据的数据库之间的交互(该数据库可能是也可能不是我们应用程序其余部分将使用的同一个数据库)并且此类继承自 IdentityDbContext

IdentityDbContext 基本上是一个带有两个 DbSets 的常规 DbContext。一份用于用户,一份用于角色

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

关于c# - 为什么在 EF 中创建 Controller 时有 2 个数据上下文类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29464655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com