在 Entity Framework 中先创建数据库并先编写代码
Creating database first and code first in Entity Framework
我有一个问题,我在 Google 上进行了广泛的搜索,但无法得到具体的答案。
我有一个项目。我已经使用了 Identity 框架,因此,它首先使用代码生成了数据库。
我打算对后续表使用数据库优先。
我的问题如下:
我可以先生成数据库,使其使用与代码优先实体相同的 DbContext
吗?
它们会有单独的连接字符串吗?
我是否必须继续使用代码优先,还是可以将这两种方法结合在一个项目中?
我实际上是 Entity Framework 的新手。
谢谢
- 我能否先生成数据库,使其使用与代码优先实体相同的 DbContext?
是的,你可以。可以先通过代码生成数据库schema,再转为数据库优先,当你使用数据库优先生成DbContext时,它会遵循你代码优先生成的规则。
- 它们会有单独的连接字符串吗?
不,我猜你必须手动完成。
- 我是否必须继续使用代码优先,还是可以将这两种方法结合在一个项目中?
在项目中同时使用代码优先和数据库优先不是一个好习惯,所以我建议只使用代码优先。
更多信息,您可以查看this
- 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>
- Will they have separate connection strings?
是的,他们会的。
- Do I have to continue using code-first, or can the two approaches be combined in a project?
如果你能一直使用 Code First
就好了,但如果你不能,还有其他方法可以混合使用 Code First
和 Database First
方法:
只需使用 2 个单独的连接字符串
我通常将标识 DbContext 命名为 AppIdentityDbContext
,而 .edmx
生成的数据上下文只是 AppDbContext
。
使用不同于 Entity Framework
的不同 ORM
您不必在项目中坚持使用一个 ORM。您可以将 Entity Framework
用于标识内容,并使用其他内容(例如 Dapper)进行阅读。
我有一个问题,我在 Google 上进行了广泛的搜索,但无法得到具体的答案。
我有一个项目。我已经使用了 Identity 框架,因此,它首先使用代码生成了数据库。
我打算对后续表使用数据库优先。
我的问题如下:
我可以先生成数据库,使其使用与代码优先实体相同的
DbContext
吗?它们会有单独的连接字符串吗?
我是否必须继续使用代码优先,还是可以将这两种方法结合在一个项目中?
我实际上是 Entity Framework 的新手。
谢谢
- 我能否先生成数据库,使其使用与代码优先实体相同的 DbContext?
是的,你可以。可以先通过代码生成数据库schema,再转为数据库优先,当你使用数据库优先生成DbContext时,它会遵循你代码优先生成的规则。
- 它们会有单独的连接字符串吗?
不,我猜你必须手动完成。
- 我是否必须继续使用代码优先,还是可以将这两种方法结合在一个项目中?
在项目中同时使用代码优先和数据库优先不是一个好习惯,所以我建议只使用代码优先。
更多信息,您可以查看this
- 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>
- Will they have separate connection strings?
是的,他们会的。
- Do I have to continue using code-first, or can the two approaches be combined in a project?
如果你能一直使用 Code First
就好了,但如果你不能,还有其他方法可以混合使用 Code First
和 Database First
方法:
只需使用 2 个单独的连接字符串
我通常将标识 DbContext 命名为
AppIdentityDbContext
,而.edmx
生成的数据上下文只是AppDbContext
。使用不同于
的不同 ORMEntity Framework
您不必在项目中坚持使用一个 ORM。您可以将
Entity Framework
用于标识内容,并使用其他内容(例如 Dapper)进行阅读。