[请问我一个问题,我已经在Google上进行了广泛搜索,但无法获得具体答案。
我有一个项目。我已经使用了Identity框架,通过它,它首先使用代码生成了数据库。
我打算将数据库优先用于后续表。
我的问题如下:
我可以首先生成数据库,使其使用与代码优先实体相同的DbContext
吗?
他们会有单独的连接字符串吗?
我必须继续使用代码优先,还是可以在项目中结合使用这两种方法?
我实际上是实体框架的新手。
谢谢
是,可以。您可以先通过代码生成数据库架构,然后再转向数据库,当您首先使用数据库生成DbContext时,它将遵循您首先通过代码生成的规则。
不,我想您必须手动执行。
在项目中先使用代码和先使用db并不是一个好习惯,因此我建议仅使用代码优先。
有关更多信息,您可以看一下this
- 我可以首先生成数据库,使其使用与代码优先实体相同的
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
的方法:
只需使用两个单独的连接字符串
我通常将标识DbContext命名为AppIdentityDbContext
,而由.edmx
生成的数据上下文仅为AppDbContext
。
使用Entity Framework
以外的其他ORM
您不必在项目中坚持一个ORM。您可以使用Entity Framework
进行身份验证,也可以使用其他内容(例如Dapper)进行阅读。