我正在使用实体框架6在asp.net mvc-5上工作。现在我目前在通用存储库上没有使用任何类型,如下所述: -
&安培;
现在通用存储库让你觉得你可以用一般的方式做所有事情..但是在这两个链接里面看起来可以生成的是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; ??如果父母有多种子类型怎么办!!通用存储库是否支持非通用查询和操作?
答案 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();