【发布时间】:2016-08-06 06:20:59
【问题描述】:
我正在使用实体框架 6 开发 asp.net mvc-5。现在我没有在通用存储库上使用任何类型,就像这里提到的那样:-
&
现在通用存储库给您一种感觉,您可以以通用方式做所有事情。但是在这两个链接中似乎可以通用的是获取、添加、删除和修改的基本操作,这些操作是内部默认提供的实体框架。所以任何人都可以使用带有 EF-6 和 MVC-5 的通用存储库来解决这些问题:-
1. 使用 Generic repo 真的是一个好方法吗?似乎通用 repo 只会提供 EF 已经提供的内容!
2.假设我有两个父/子(数据中心/区域)对象:-
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; }
}
现在使用通用存储库,我可以使用相同的通用存储库方法获取、添加、编辑、删除这两个对象。但假设我想检索与特定数据中心相关的所有区域,如下所示:-
var results = entity.DataCenters.SingleOrDefault(a => a.ID == id).Zones.Where(a => a.Name.Contains("1"));
通用存储库也可以支持这样的查询,这样我就可以将查询重新用于其他对象类型(数据中心和区域除外)。例如,有一个通用查询:- 通过 ID 获取父对象,并为其子对象获取名称中包含单词“1”的子对象??如果父母有多个孩子类型怎么办!通用存储库是否支持非通用查询和操作?
【问题讨论】:
-
A) 是的,因为您可以根据需要将 EF 替换为 ServiceStack;在可能的情况下解耦总是好的。 B)是的,原则上您的存储库实现可以为您完成手工工作并从其他表中检索引用的对象。 ServiceStack.OrmLite 可以做到。 github.com/ServiceStack/…
-
@MeirionHughes 现在我不使用 ServiceStack,我只使用 EF-6,所以 EF 是否支持重新使用我上面查询父/子对象的查询?
标签: asp.net-mvc entity-framework entity-framework-6 dbcontext asp.net-mvc-5