什么可以/不能在Generic存储库中完成

时间:2016-04-14 15:22:16

标签: asp.net-mvc entity-framework entity-framework-6 dbcontext asp.net-mvc-5

我正在使用实体框架6在asp.net mvc-5上工作。现在我目前在通用存储库上没有使用任何类型,如下所述: -

Link-1

&安培;

Link-2

现在通用存储库让你觉得你可以用一般的方式做所有事情..但是在这两个链接里面看起来可以生成的是get,add,delete& amp;的基本操作。修改由Entity框架内提供的defualt。因此,任何人都可以使用EF-6& amp; amp; MVC-5: -

1.使用Generic repo真的很好吗?似乎通用的回购只会提供EF已经提供的东西!!

2.let说我有两个父/子(数据中心/区域)对象: -

public class DataCenter
    {

        public int ID { get; set; }
        public string Name { get; set; }
        public byte[] timestamp { get; set; }


        public virtual ICollection<Zone> Zones { get; set; }
    }

 public class Zone
    {


        public int ZoneID { get; set; }
        public string Name { get; set; }
        public int DataCenterID { get; set; }

        public virtual DataCenter DataCenter { get; set; }

    }

现在使用Generic存储库我可以使用相同的通用repo方法获取,添加,编辑,删除这两个对象。但是,我想要检索与特定数据中心相关的所有区域,如下所示: -

var results = entity.DataCenters.SingleOrDefault(a => a.ID == id).Zones.Where(a => a.Name.Contains("1"));

通用存储库也可以支持这样的查询,我可以用另一种对象类型(Datacenter&amp; zone除外)重用查询。例如,要有一个通用查询: - 按ID获取父对象,并为其子项获取名称中包含单词&#34; 1&#34; ??如果父母有多种子类型怎么办!!通用存储库是否支持非通用查询和操作?

1 个答案:

答案 0 :(得分:1)

我经历了同样的问题......我首先做了一个特定的存储库,然后我改为通用。但我最终不得不编写如此多的特定查询代码,我决定更改非通用存储库,返回ToList(我不想要IQueryable)并使用工作单元模式。现在我觉得我对事情的方式很满意。

编辑: 通过它的属性查询子项,也将父项带回来(这就是你想要的吗?):

return await _context.Entity.Include(e => e.Parent)
                            .Where(e => e.SomeProp == someParam)
                            .ToListAsync();

或者,Querychild,使用父级中的某些属性,返回父级:

return await _context.Entity.Include(e => e.Parent)
                                .Where(e => e.Parent.SomeProp == someParam)
                                .ToListAsync();