显示ICollection ViewModel中的数据

时间:2017-09-14 07:24:57

标签: c# model-view-controller asp.net-core-mvc repository-pattern entity-framework-core

我需要一些帮助。我有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?

2 个答案:

答案 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));
        }