请问我有一个问题,我在谷歌上广泛搜索,但无法得到具体的答案。
我有一个项目。我已经使用了 Identity 框架,因此,它首先使用代码生成了数据库。
我打算对后续表使用数据库优先。
我的问题如下:
-
是否可以先生成数据库,使其使用与代码优先实体相同的
DbContext
? -
它们是否具有单独的连接字符串?
-
我是否必须继续使用代码优先,或者这两种方法是否可以组合在一个项目中?
我实际上是实体框架的新手。
谢谢
- 我是否可以先生成数据库,使其使用与代码优先实体相同的
DbContext
?
不,你不能,假设你正在使用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
将表导入到项目中的模型/类中时,它不会看到您在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>
- 它们会有单独的连接字符串吗?
是的,他们会的。
- 我是否必须继续使用代码优先,或者这两种方法是否可以组合在一个项目中?
如果您可以一直使用Code First
,那就太好了,但如果不能,还有其他方法可以混合Code First
和Database First
方法:
只需使用 2 个单独的连接字符串
我通常将身份命名为 DbContext
AppIdentityDbContext
,而.edmx
生成的数据上下文只是AppDbContext
。使用除
Entity Framework
以外的其他ORM您不必在项目中坚持使用一个ORM。您可以将
Entity Framework
用于标识内容,并使用其他内容(例如 Dapper(进行阅读。
- 我是否可以先生成数据库,以便它使用与代码第一个实体相同的 DbContext?
可以。可以先通过代码生成数据库模式,然后再转到数据库,当你先使用数据库生成 DbContext 时,它将遵循你先通过代码生成的规则。
- 它们会有单独的连接字符串吗?
不,我想你必须手动完成。
- 我是否必须继续使用代码优先,或者这两种方法是否可以组合在一个项目中?
在项目中同时使用代码优先和 db 优先不是一个好的做法,所以我建议只使用代码优先。
欲了解更多信息,您可以查看此内容