我需要一些帮助。我有4个实体。
实体1具有来自实体2和3的FK。但实体4具有来自实体1的FK。
Entity4具有属性:
ID作为主键
FK_Entity1
代码为字符串
现在,如果我的ViewModel有下一个代码:
class ViewModel.cs
{
public int id {get;set;}
public string name {get;set;}
public virtual Entity2 Entity2 {get;set;}
public virtual Entity3 Entit3 {get;set;}
public virtual ICollection<Entity4> Entity4 {get;set;}
}
在控制器中使用下一个代码我收到信息:
public class NameController : Controller
{
private IRepository<Entity1> _repoEntity1;
public Entity1Controller(IRepository<Entity1> repoEntity1)
{
_repoEntity1 = repoEntity1;
}
[HttpGet]
public async Task<IActionResult> Index()
{
string[] entities = { "Entity2", "Entity3" };
var items = _repoEntity1.GetAll(entities);
return View(Mapper.Map<IEnumerable<ViewModel>>(items));
}
}
在视图中我想显示来自Entity4的每个代码以存在FK_Entity1
示例:
如果Entity1的记录为Id = 1,则name =“John”,FK_Entity2 = 1,FK_Entity3 = 3
和Entity4的记录ID = 1,FK_Entity = 1,代码=“test”
id = 2,FK_Entity = 1,code =“ABCD”
我想看代码(ABCD和测试)
在视图中我就像这样
model IEnumerable<ViewModel>
foreach(var item in Model)
{
item.name
item.Entity2.name
item.Entity3.name
}
但是不能放@ item.Entity4.code,我应该怎么做?
更新:
public IEnumerable<T> GetAll(string[] includes
{
return includes.Aggregate(entities.AsQueryable(), (query, path) =>
query.Include(path));
}
这是来自存储库的代码,我想我应该修改它以加入Entity4?
答案 0 :(得分:0)
在您的ViewModel Entity4 中用作ICollection。如果没有循环,则无法访问通用列表属性。这就是为什么你只能将item.Entity4放在你的foreach循环中。
答案 1 :(得分:0)
以下是我如何解决问题的代码
[HttpGet]
public async Task<IActionResult> Index()
{
string[] entities = { "Entity2", "Entity3" };
var items = _repoEntity1.GetAll(entities);
var itemsEntity4 = _repoEntity4.Getall("Entity1");
foreach(var item in items)
{
foreach(var x in itemsEntity4)
{
if(item.id == x.Entity1.Id)
{
item.Entity4.Add(x);
}
}
}
return View(Mapper.Map<IEnumerable<ViewModel>>(items));
}