C# 在导航属性内使用导航属性
我有3个领域模型PdModel、PdTable、PdColumn。表之间的关系非常简单-PdModel有许多PdTable,PdTable有许多PDCColumn。我需要的是填充我的IndexModel,这样我就可以使用razor语法填充我的下拉列表Button——例如,为模型选择下拉列表,然后在特定的模型下为该模型表和该表列选择下拉列表 在这里我找到了提示,但它不起作用: 根据此url,我的索引方法如下所示:C# 在导航属性内使用导航属性,c#,asp.net-mvc,entity-framework,asp.net-core,C#,Asp.net Mvc,Entity Framework,Asp.net Core,我有3个领域模型PdModel、PdTable、PdColumn。表之间的关系非常简单-PdModel有许多PdTable,PdTable有许多PDCColumn。我需要的是填充我的IndexModel,这样我就可以使用razor语法填充我的下拉列表Button——例如,为模型选择下拉列表,然后在特定的模型下为该模型表和该表列选择下拉列表 在这里我找到了提示,但它不起作用: 根据此url,我的索引方法如下所示: PdFolderTree = _context.pdFolderTree.Incl
PdFolderTree = _context.pdFolderTree.Include(x => x.pdModels)
.Include(x => x.pdModels.Select(y => y.PdTables))
.ToList();
我得到的错误是:
InvalidOperationException:属性表达式“x=>{from x.pdModels select[y].PdTables}”无效。表达式应表示属性访问:“t=>t.MyProperty”。有关包含相关数据的详细信息,请参阅
我使用的是.NETCoreRazorPages/MVC
过去有人处理过类似的事情吗
谢谢
public class PdModel
{
[Key]
public int Id { get; set; }
public string ModelName { get; set; }
public ICollection<PdTable> PdTables { get; set; }
}
public class PdTable
{
[Key]
public int Id { get; set; }
public int ModelId { get; set; }
public string TableName { get; set; }
[ForeignKey("ModelId")]
public virtual PdModel PdModels { get; set; }
public ICollection<PdColumn> PdColumns { get; set; }
}
public class PdColumn
{
[Key]
public int Id { get; set; }
public string ColumnName { get; set; }
[ForeignKey("TableId")]
public PdTable pdTable { get; set; }
}
公共类PdModel
{
[关键]
公共int Id{get;set;}
公共字符串ModelName{get;set;}
公共ICollection PdTables{get;set;}
}
公共类PdTable
{
[关键]
公共int Id{get;set;}
公共int ModelId{get;set;}
公共字符串表名{get;set;}
[外键(“ModelId”)]
公共虚拟PdModel PdModels{get;set;}
公共ICollection PdColumns{get;set;}
}
公共类PdColumn
{
[关键]
公共int Id{get;set;}
公共字符串ColumnName{get;set;}
[外键(“表ID”)]
公共PdTable PdTable{get;set;}
}
我认为您需要使用。然后使用include()
您链接到的Microsoft提供了以下示例:
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList();
}
因此,我认为您需要:
PdFolderTree = _context.pdFolderTree.Include(tree => tree.pdModels)
.ThenInclude(model => model.PdTables)
.ThenInclude(table => table.PdColumns)).ToList();
我还没有对此进行测试,但它应该会给您一个列表,列出
pdFolderTree
是什么,并且应该填充所有导航属性。我认为您需要使用。然后使用include()
您链接到的Microsoft提供了以下示例:
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList();
}
因此,我认为您需要:
PdFolderTree = _context.pdFolderTree.Include(tree => tree.pdModels)
.ThenInclude(model => model.PdTables)
.ThenInclude(table => table.PdColumns)).ToList();
我还没有对此进行测试,但它应该会给您一个列表,列出pdFolderTree
是什么,并且应该填充所有导航属性