【问题标题】:How to populate nested object in model?如何在模型中填充嵌套对象?
【发布时间】:2016-06-07 09:02:06
【问题描述】:

我正在使用实体框架创建一个数据库优先的 Web api。我通过创建 ADO.NET 实体模型来创建模型,这些模型使用我选择的表上的字段自动填充。我希望能够获取其中一些字段并将它们分组到自定义对象中,以便在显示 xml 时,它们将显示为子节点。

一个例子是,如果我有具有以下属性的类

public class Person
{
  public string firstname{get; set;}
  public string lastname{get; set;}
  public string street{get; set;}
  public string city{get; set;}
  public string zip{get; set;}
}

我希望它变成这样

public class Person
{
  public string firstname{get; set;}
  public string lastname{get; set;}
  public string address{get; set;}//where address contains street, city, and zip
}

我将如何实现这个新的 Person 类并使用我的 dbcontext 填充自定义对象的数据

【问题讨论】:

    标签: c# asp.net entity-framework linq ado.net


    【解决方案1】:

    不可能将三个字符串属性更改为一个字符串属性。例如,如果 street 有两个单词,如何将 Address 属性划分为 street city 和 zip?

    您可以创建 Address 类(具有三个属性)并将其用作您的 Person 类。但是当您尝试重新生成/更新模型时会遇到问题 - 在这种情况下最好使用代码优先方法。

    【讨论】:

      【解决方案2】:

      归属关系

      我认为您正在寻找的是 Person 和一个名为 Address 的新类之间的关系。

      要在Person 中引用新的Address 类,您可以执行以下操作:

      public class Person
      {
          ...
          public Guid AddressId { get; set; }
          public Address { get; set; }
      }
      

      实体框架随后会将Address 与给定的AddressIdPerson 相关联。

      Address 中,您可以执行以下操作:

      public class Address
      {
          public string City { get; set; }
          public string Street { get; set; }
          ...
      }
      

      急切加载

      为确保在加载Person 时加载Address,您可以使用实体框架的Eager Loading 功能,例如:

      context.Person.Include(x => x.Address)
      

      【讨论】:

      • 我对此有疑问,显然如果您在这种情况下没有 FK“AddressId”,因为 Person 类不会加载对象,我的意思是 Include 只包含嵌套对象上面有地址...
      【解决方案3】:

      使用可枚举的列表,如

      public class Person
      

      {

      公共字符串名字{get;设置;}

      公共字符串姓氏{get;设置;}

      公开列表地址{ get;放; }

      }

      公开课地址 {

      public string street{get; set;}
      
      public string city{get; set;}
      
      public string zip{get; set;}
      
      }
      

      【讨论】:

      • public IEnumerable
        地址{get;set;}这样使用
      猜你喜欢
      • 2017-10-03
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2016-08-17
      • 2021-05-23
      • 2015-06-04
      相关资源
      最近更新 更多