从数据库中的对象检索数组或列表

时间:2012-02-11 17:18:01

标签: c# asp.net-mvc-3 entity-framework

当我从数据库中提取对象时,我遇到了麻烦,同时让框架也在对象中获取一个数组。我发现对于子对象,.Include(“subobject”)似乎可以工作,但我不能让它适用于数组或列表。

我的模特:

public class RunData
{
   [Key]
   [Required]
   public int id { get; set; }
   public List<RunElement> Runs { get; set; }
   public string[] DataLabels { get; set; }
}

实体清单:

public class ProgramEntities:DbContext
{
    public DbSet<RunData> RunData { get; set; }
    public DbSet<RunElement> RunElement { get; set; }
}

控制器代码:

    public ViewResult Details(int id)
    {
        RunData rundata = (from RunData in db.RunData.Include("Runs").in where RunData.id == id select RunData).First();
        return View(rundata);
    }

我确实遇到了各种麻烦,它没有返回运行对象列表,但是当我执行修复问题的.Include(“运行”)时。所以,现在我的麻烦是DataLabels字符串数组。如果我尝试.Include(“DataLabels”)程序失败并说:

  

指定的包含路径无效。 EntityType   'Program_Dataviewer.Models.RunData'未声明导航   名为“DataLabels”的属性。

我在网上搜索了一些,我没有看到任何明确的答案。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的数据模型中不能包含基元集合,因为每个集合必须映射到关系空间中的表(想一想 - 数据库如何组织/保存集合?)。您可以做的是为DataLabels引入一个表/实体,例如像这样的东西:

public class RunData
{
   [Key]
   [Required]
   public int id { get; set; }
   public List<RunElement> Runs { get; set; }
   public List<DataLabel> DataLabels { get; set; }
}

public class DataLabel
{
  [Key]
  public int id { get; set; }
  public string LabelName { get; set; }
}