在 Entity Framework 中先创建数据库并先编写代码

Creating database first and code first in Entity Framework

我有一个问题,我在 Google 上进行了广泛的搜索,但无法得到具体的答案。

我有一个项目。我已经使用了 Identity 框架,因此,它首先使用代码生成了数据库。

我打算对后续表使用数据库优先。

我的问题如下:

  1. 我可以先生成数据库,使其使用与代码优先实体相同的 DbContext 吗?

  2. 它们会有单独的连接字符串吗?

  3. 我是否必须继续使用代码优先,还是可以将这两种方法结合在一个项目中?

我实际上是 Entity Framework 的新手。

谢谢

  1. 我能否先生成数据库,使其使用与代码优先实体相同的 DbContext?

是的,你可以。可以先通过代码生成数据库schema,再转为数据库优先,当你使用数据库优先生成DbContext时,它会遵循你代码优先生成的规则。

  1. 它们会有单独的连接字符串吗?

不,我猜你必须手动完成。

  1. 我是否必须继续使用代码优先,还是可以将这两种方法结合在一个项目中?

在项目中同时使用代码优先和数据库优先不是一个好习惯,所以我建议只使用代码优先。

更多信息,您可以查看this

  1. Can I generate the database first such that it uses same DbContext as the code first entities?

不,你不能,假设你正在使用 ADO.NET Entity Data Model / .edmx 将你生成的数据库表导入到你的项目中。

原因是,当您使用 Code First 时,您在 web.config 中的连接字符串将如下所示:

<connectionStrings>
  <add name="YOUR_IDENTITY_CONTEXT_NAME" providerName="System.Data.SqlClient"
    connectionString="Data Source=xxx; Initial Catalog=xxx; User Id=xxx; Password=xxx;" />
</connectionStrings>

但是当您使用 .edmx 将表导入 models/classes 到您的项目中时,它不会看到您使用 Code First 时的现有连接字符串。相反,您必须创建一个新的连接字符串,如下所示:

<connectionStrings>
  <add name="YOUR_DATABASE_FIRST_CONTEXT_NAME" providerName="System.Data.EntityClient"
    connectionString="metadata=res://*/xxx|res://*/xxx|res://*/xxx;provider=System...." />
</connectionStrings>


  1. Will they have separate connection strings?

是的,他们会的。


  1. Do I have to continue using code-first, or can the two approaches be combined in a project?

如果你能一直使用 Code First 就好了,但如果你不能,还有其他方法可以混合使用 Code FirstDatabase First 方法:

  1. 只需使用 2 个单独的连接字符串

    我通常将标识 DbContext 命名为 AppIdentityDbContext,而 .edmx 生成的数据上下文只是 AppDbContext

  2. 使用不同于 Entity Framework

    的不同 ORM

    您不必在项目中坚持使用一个 ORM。您可以将 Entity Framework 用于标识内容,并使用其他内容(例如 Dapper)进行阅读。