1

在您将此标记为“此”的副本之前,请知道我已经使用过它。

我想使用 EF 核心连接到数据库。

我想要的过程:

  1. 我收到来自 JSON 帖子的信息
  2. 根据 JSON 的结构将其反序列化为一组对象。
  3. (以前在数据库中存储了一堆用于测试)
  4. 将两个不同的 C# 对象连接到数据库中的单个表中
  5. 从 DB 4 和 5 的单个表中检索两个不同的 C# 对象 是我卡住的地方

杰森:

{
  "jobId": "ad86dbd6-ccd7-4ef4-b317-c990a8eaa3a3",
  "status": "COMPLETED",
  "report": {
     "processedCount": 18,
     "importedCount": 0,
     "failedCount": 18,
     "errors": [
        {
          "Row": 2,
          "_id": "qaautoAssetValidation01",
          "_import action": "C",
          "fieldName": "qaauto attribute date01",
          "errorCode": "10011",
          "Error": "Mandatory attribute qaauto attribute date01 not supplied"
        }
    }
}

我创建了以下与 JSON 相关的对象。

    [Table("ImportJobStatusReport")]
    public class ApiResponseModel
    {
        [JsonProperty(PropertyName = "jobId")]
        public Guid JobId { get; set; }

        [JsonProperty(PropertyName = "status")]
        public string JobStatus { get; set; }

        [JsonProperty(PropertyName = "report")]
        public StatusReport Report { get; set; }

    }


    [Table("ImportJobStatusReport")]
    public class StatusReport
    {
        //Only added this ID to help with the EF mapping below
        public Guid JobId { get; set; }

        [JsonProperty(PropertyName = "processedCount")]
        public int ProcessedCount { get; set; }

        [JsonProperty(PropertyName = "importedCount")]
        public int ImportedCount { get; set; }

        [JsonProperty(PropertyName = "failedCount")]
        public int FailedCount { get; set; }

        [JsonProperty(PropertyName = "errors")]
        public List<ProductImportErrorModel> Errors { get; set; }

        //Only added this for mapping below
        public ApiResponseModel Response { get; set; }

    }

数据库对这两个有一个对象,因为我真的不需要两个表来表示单个状态更新。

ImportJobStatusReport 表

JobId    JobStatus    ProcessedCount    ImportedCount    FailedCount
(guid)   COMPLETED    18                0                18

我的映射:

modelBuilder.Entity<ApiResponseModel>()
.HasOne(e => e.Report)
.WithOne(e => e.response)
.HasForeignKey<ImportJobStatusReportModel>(e => e.JobId);
 modelBuilder.Entity<ApiResponseModel>().ToTable("ImportJobStatusReport");
 modelBuilder.Entity<ImportJobStatusReportModel>().ToTable("ImportJobStatusReport");

现在由于某种原因,当我尝试ApiResponseModel从我想要的数据库中检索一个并期望它拥有数据库中的所有值并返回给我时:

ApiResponseModel
  -JobId
  -JobStatus
   Report
     -ProcessedCount
     -ImportedCount
     -FailedCount 
     -Errors (probably null for now)

相反,我得到的是:

ApiResponseModel
  -JobId
  -JobStatus
   null

我已经尝试了各种不同的映射方式,试图让 EF 认识到这两个对象都绑定到数据库中的一行,并在从数据库中检索它们时填充这两个对象,但我必须错过一些基本的东西。

4

0 回答 0