【问题标题】:How do I use Entity Framework with a RootObject DTO?如何将实体框架与 RootObject DTO 一起使用?
【发布时间】:2021-03-14 13:58:54
【问题描述】:

我正在尝试通过实体框架构建一个或多个具有映射的表,但是,我在使用从我正在使用的 API 构建的 DTO 文件时遇到了麻烦。

这是我正在使用的 DTO 文件,我专门从 POSTMAN 粘贴它以获取 JSON 数据。

 public class AllRequests
 {
        public class Rootobject
        {
            public Operation operation { get; set; }
        }

        public class Operation
        {
            public Result result { get; set; }
            public Detail[] details { get; set; }
        }

        public class Result
        {
            public string message { get; set; }
            public string status { get; set; }
        }

        public class Detail
        {
            public string requester { get; set; }
            public string workorderid { get; set; }
            public string accountname { get; set; }
            public string createdby { get; set; }
            public string subject { get; set; }
            public string technician { get; set; }
            public string isoverdue { get; set; }
            public string duebytime { get; set; }
            public string priority { get; set; }
            public string createdtime { get; set; }
            public string ignorerequest { get; set; }
            public string status { get; set; }
        }
}

正如您在上面看到的,它非常分层,因此不像从简单的类文件生成表那么简单。

这是我的DbContext 文件:

public class TransitionContext : DbContext
{
        private const string connectionString = (connection);

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(connectionString);
        }

        public DbSet<AllRequests> Requests { get; set; }
}

我已经设置了运行良好的迁移,有一个连接到我的 SQL Server。但是,当我在 PM 控制台中运行 Update-Database 命令时,它不起作用。这些错误不是直截了当的,但它们让我在圈子里跑来跑去,首先它设置了一个 ID 键,然后是表关系,但是没有关于如何做到这一点的好的源材料。

谁能教我如何在我的 SQL Server 上通过实体框架成功实现这个 DTO?我猜它会使用模型创建器,但我仍然不确定该过程在这种情况下是如何完全工作的。

任何帮助将不胜感激。

【问题讨论】:

  • 确实缺少一些键...
  • 发布确切的错误消息...“它不会工作”...嗯...不会工作。把它放在OP中。
  • @KyleAT OP 是你 - 原始海报。将所有信息放在问题中。 I don't want to put too much information into the question. 你没有提供足够的信息。您发布的内容无法映射,实际上会在构建 DbContext 时导致运行时错误
  • @KyleAT 出了点问题,但您没有发布足够的信息。 EF 不处理 API DTO,它处理实体、表及其映射。适用于 API 的方法不适用于应用程序类或数据库表。 DbSet&lt;AllRequests&gt; 毫无意义,因为嵌套类和封闭类之间没有 no 关系。如果AllRequests 是一个命名空间会更有意义
  • first it's set an ID key, then it's table relationships, but there's no good source material on how to do it. 相反,每个教程都涵盖了这一点。有这么多错误的原因是没有 no 配置,类之间没有关系,没有ID 属性。没有约定可以用来确定键和关系

标签: c# json sql-server entity-framework dto


【解决方案1】:

尝试像错误消息提示的那样使用 [NotMapped]

   public class Operation
        {
            public Result result { get; set; }
            [NotMapped]
            public Detail[] details { get; set; }
        }

如果您需要该数组...EF 需要一种导航方式...即一个键。

【讨论】:

  • 在 DbContext 中没有键、没有关系、没有配置,而唯一的“配置”类 AllRequests 根本不包含任何内容。这只是几十个问题中的一个 - 甚至没有 DbSet&lt;Operation&gt;
  • @PanagiotisKanavos 正如我在 OP 上所说,我使用了来自 GET API 的 POSTMAN 的特殊粘贴。我正在使用的这个 DTO 是从中创建的,并且 GET 请求有效,因此数据被存储到该 DTO 文件中。然后我希望将其映射并存储到请求表中。我希望它能够从该类文件生成一组表或表层次结构。我确实解释了这部分。
  • @KyleAT:最直接的方法是自己编写从 Operation DTO 到一流 EF 实体的映射。
  • @KyleAT 您试图映射一个不包含任何内容的类 - 没有字段,没有属性,没有与嵌套类的继承关系。这些课程来自哪里并不重要。 AllRequests 是空的
  • @PanagiotisKanavos 我之前在 Entity Framework 中使用标准 C# 类映射了类,没有数据或 EF 注释,只有一个主要的默认 Id 键和许多其他键。所以我认为它会像那样直截了当。
猜你喜欢
  • 2011-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多