2012-02-11 87 views
2

当我从数据库中获取对象并获取该对象的同时也在对象中获取数组时,我遇到了麻烦。我发现对于子对象.Include(“子对象”)似乎工作,但我不能让它适用于数组或列表。从数据库中的对象中检索数组或列表

我的模型:

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'的导航 属性。

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

+0

是否有原因不使用列表而不是字符串[]? – 2012-02-11 17:34:21

+0

@dtryon我最初是在那里使用一个列表,但在尝试随机的东西来使它工作的过程中,我将其更改为一个数组。所以,列表或数组都不起作用。 – 2012-02-11 17:42:20

回答

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; } 
}