gpt4 book ai didi

entity-framework - 我们可以将现有实体用于 Entity Framework 而不是 EF 生成的实体吗

转载 作者:行者123 更新时间:2023-12-01 23:49:06 25 4
gpt4 key购买 nike

我可以使用已经是我的项目的一部分的实体作为 Entity Framework 实体

我的项目遵循领域驱动设计,它确实包含代表我的数据库表的所有实体。

我不希望 Entity Framework 从我现有的数据库生成新实体,而是希望它使用我项目中的现有实体。

当我像这样在 DB 上下文类中使用我现有的实体时:

        public DbSet<SomeOtherProjectInSoulution.ChequeBookRequestAuditLog> ChequeBookRequestAuditLogs { get; set; }
public DbSet<SomeOtherProjectInSoulution.OfflinePayOrderRequestAuditLogEntity> OfflinePayOrderRequestAuditLogEntities { get; set; }
public DbSet<SomeOtherProjectInSoulution.FundsTransferAuditLogEntity> FundsTransferAuditLogEntities { get; set; }

它给我以下错误:

实体类型 FundsTransferAuditLogEntity 不是当前模型的一部分上下文。

即使这些实体是 Entity Framework 创建的实体的EXACT Replica,但我删除了它们

数据库上下文:

public partial class PRISMEntitiesTest : DbContext
{
public PRISMEntitiesTest()
: base("name=PRISMEntitiesTest")
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

public DbSet<Application.Domain.AuditLog.ChequeBookRequestAuditLog> ChequeBookRequestAuditLogs { get; set; }
public DbSet<Application.Domain.AuditLog.OfflinePayOrderRequestAuditLogEntity> OfflinePayOrderRequestAuditLogEntities { get; set; }
public DbSet<Application.Domain.AuditLog.FundsTransferAuditLogEntity> FundsTransferAuditLogEntities { get; set; }
}

最佳答案

问题是,当您在模型中进行更改时,实体(类)发生更改,EF 模型与数据库不匹配。第一次在应用程序中初始化 DbContext 时,它会检查 EF 模型是否与 DB 匹配。如果您更新模型,但不更新数据库,您将得到一个异常。

一个替代方案是 marianoc84 答案:在所有迭代中删除并创建数据库,但我必须提出一个更简洁的解决方案:

  1. 忘记设计器 View 中的模型
  2. 首先使用纯 EF 代码,即使用代码而非图表定义模型
  3. 使用迁移

您可以通过删除它来完成任务 1。是的,删除模型。你正在使用 DDD,你不需要那个

对于第 2 步,您可以使用“EF Reverse POCO Code First Generator”之类的东西。这将允许您从数据库创建一个或多个 Code First 模型(即创建纯 POCO 类,并为它们创建 Code First 配置,如列类型和大小、键、关系...)。当您习惯了这种工作方式后,您会发现它以更好的方式匹配 DDD,因为您无需修改​​图表,而是直接修改实体(类)并将更改移至 DB(这是第 3 步)

第三步:如果你使用的是marianoc84方案,并且只有一个DbContext,则不需要这一步。如果您有多个上下文,或者不想在启动应用程序时删除和创建数据库,那么您可以使用迁移。通过迁移,您可以改进 Code First 模型并以非破坏性方式将更改应用到数据库。基本上,当 DbContext 和数据库模式在其原始状态下匹配时,您会在初始时刻启用迁移并创建“初始迁移”。您会在项目的“迁移”文件夹中看到一个创建的文件。从现在开始,您可以更改 DbContext 中的类,并创建新的迁移。每个迁移都有关于如何修改数据库模式的“说明”,从以前的迁移到最近创建的(向上),反之亦然(向下),你必须给它一个名字。当您想要更新数据库时,您只需运行 Update-Database 命令,默认情况下,该命令将更新您的数据库以匹配上次迁移。

事实上,迁移功能要强大得多:它们允许从一个迁移到另一个迁移,直接在数据库中应用更改,被分解,生成一个 SQL 脚本来更新数据库......谷歌的 EF 迁移和你会发现很多关于如何使用它的例子。但也许this is the best information available .

注意:正在开发的新 EF 版本可能命名为“Entity Framework 7”,将无法选择将 DB 定义为图表:it will be compulsory to use Code First ,并且有充分的理由。您可以在 ADO.NET blog 中获得大量相关信息。 .

关于entity-framework - 我们可以将现有实体用于 Entity Framework 而不是 EF 生成的实体吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27497955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com