【问题标题】:EF avoid attaching navigation properties to the DTOEF 避免将导航属性附加到 DTO
【发布时间】:2018-10-26 06:58:41
【问题描述】:

在我的 EF 数据模型中,我有一个 Location 实体和 LocationType 实体。位置具有 FkLocationTypeID 属性。现在,如果我从我的 API 端点返回一个 Location 对象,它会返回一个所有导航属性都附加到它的大对象。因此,我创建了一个 LocationDto 来仅返回我想要的那些属性。我的 DTO 看起来像这样:

 public class LocationDto
{
    public int LocationId { get; set; }
    public LocationDto ParentLocation { get; set; }
    public LocationType LocationType { get; set; }
    public string LocationName { get; set; }
    public string LocationCode { get; set; }
    // other properties here
}

现在的问题是 - 我的 DTO 中有一个 LocationType 属性,它是一个 EF 对象。在我添加它的那一刻,我的 JSON 又很长,因为与 LocationType 的所有关联。

有没有办法避免这种情况,只检索一个 LocationType 对象?

以下是包含 LocationType 后我的 json 的样子。

    {
  "locationId": 0,
  "locationType": {
    "locationTypeId": 0,
    "locationTypeName": "string",
    "locationTypeDisplayName": "string",
    "localizedKey": "string",
    "locations": [
      {
        "locationId": 0,
        "fkParentLocationId": 0,
        "fkLocationTypeId": 0,
        "fkTimeZoneId": 0,
        "locationName": "string",
        "locationDisplayName": "string",
        "locationCode": "string",
        "address1": "string",
        "address2": "string",
        "city": "string",
        "state": "string",
        "country": "string",
        "zipCode": "string",
        "phoneNumber": "string",
        "faxNumber": "string",
        "phoneExtention": "string",
        "email": "string",
        "longitude": 0,
        "latitude": 0,
        "useAppointments": true,
        "availabilityWindowDays": 0,
        "appointmentCutOffDays": 0,
        "dailySummaryEmailTime": "string",
        "durationBeforeFirstApptHours": 0,
        "reminderBeforeApptSmsHours": 0,
        "reminderBeforeApptEmailHours": 0,
        "createdBy": 0,
        "createdDate": "2018-10-26T06:51:00.288Z",
        "changedBy": 0,
        "changedDate": "2018-10-26T06:51:00.288Z",
        "activeStatus": 0,
        "enableStaffSelection": true,
        "showInWidget": true,
        "autoAssign_FloatPriorityMode": 0,
        "googleReserveEnabled": true,
        "messageLogs": [
          {
            "messageLogId": 0,
            "fkMessageFormatTypeId": 0,
            "fkMessageTypeId": 0,
            "fkLocationId": 0,
            "fkUserId": 0,
            "fkAppointmentId": 0,
            "sentTime": "2018-10-26T06:51:00.288Z",
            "messageUid": "string",
            "messageFormatType": {
              "messageFormatTypeId": 0,
              "messageFormatTypeName": "string",
              "messageTemplates": [
                {
                  "messageTemplateId": 0,
                  "fkMessageFormatTypeId": 0,
            .....................................
          }
       }

【问题讨论】:

标签: c# entity-framework dto navigation-properties


【解决方案1】:
  • 不要混合使用 EF 模型和 DTO!
  • 在单独的命名空间(项目、程序集)中创建一套完整的 DTO
  • 使用映射器(即 Automap 或类似工具)在 EF 模型和 DTO 之间进行映射

【讨论】:

  • 是的,我认为这是最好的做法。
猜你喜欢
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2015-11-13
  • 1970-01-01
相关资源
最近更新 更多