首先在实体框架中创建数据库并首先创建代码

问题描述 投票:0回答:2

[请问我一个问题,我已经在Google上进行了广泛搜索,但无法获得具体答案。

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

我打算将数据库优先用于后续表。

我的问题如下:

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

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

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

我实际上是实体框架的新手。

谢谢

c# entity-framework ef-code-first asp.net-identity
2个回答
0
投票
  1. 我可以首先生成数据库,使其使用与代码优先实体相同的DbContext吗?

是,可以。您可以先通过代码生成数据库架构,然后再转向数据库,当您首先使用数据库生成DbContext时,它将遵循您首先通过代码生成的规则。

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

不,我想您必须手动执行。

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

在项目中先使用代码和先使用db并不是一个好习惯,因此我建议仅使用代码优先。

有关更多信息,您可以看一下this


0
投票
  1. 我可以首先生成数据库,使其使用与代码优先实体相同的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>

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

是,他们会的。

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

如果可以一直使用Code First,那将是很好的,但是,如果不能使用,则可以使用其他方法来混合Code FirstDatabase First的方法:

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

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

  2. 使用Entity Framework以外的其他ORM

    您不必在项目中坚持一个ORM。您可以使用Entity Framework进行身份验证,也可以使用其他内容(例如Dapper)进行阅读。

© www.soinside.com 2019 - 2024. All rights reserved.