我试图在脚手架上下文中获取.Net Core中的相关实体。
我正在构建一个正在构建的MVC中的Details页面。我需要属性和导航。显示所有相关属性,但是,只有非ICollection 导航属性显示在.Navigations中。
正在加载的对象是 Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore.ModelMetaData
foreach (var property in Model.ModelMetadata.Properties)
{
if (property.Scaffold && !property.IsPrimaryKey && !property.IsForeignKey)
{
<dt>
@@Html.DisplayNameFor(model => model.@GetValueExpression(property))
</dt>
<dd>
@@Html.DisplayFor(model => model.@GetValueExpression(property))
</dd>
}
}
foreach (var navigation in Model.ModelMetadata.Navigations)
{
<dt>
@@Html.DisplayNameFor(model => model.@GetValueExpression(navigation))
</dt>
<dd>
<a asp-area="" @GetNavigationLinkExpression(navigation)>@@Html.DisplayFor(model => model.@GetValueExpression(navigation).@navigation.DisplayPropertyName)</a>
</dd>
}
我的模型就是这样......而ModelMetaData只能浏览第二个并跳过第一个。我在哪里可以访问第一个属性,以便我可以模板化?
public virtual ICollection<SomeModel> CollectionNavigationProperty1 { get; set; }
public virtual AnotherSomeModel NavigationProperty1 { get; set; }
答案 0 :(得分:1)
好吧,经过几个小时的尝试,我设法制作了一个远不如我想要的动态变通方法。我只是无法弄清楚如何获取实体模型的Type对象。
您可以按如下方式获取ICollection对象列表:
Person
将'YourProjectName.ContextObject'替换为DbContext对象的完整名称空间和类名。 替换'YourProjectName.Entities。'使用您的实体所在的完整命名空间。
只有当您的实体/模型保存在同一名称空间中时,这才能正常工作。
希望有人可以提供更好的解决方案,但这将是我现在使用的。