C# 实体框架,如何使其更通用,编写更少的代码
因此,我正在编写一个程序,并使用EF 6获取数据 基本上,我认为最简单的方法是有这样一个类:C# 实体框架,如何使其更通用,编写更少的代码,c#,entity-framework-6,C#,Entity Framework 6,因此,我正在编写一个程序,并使用EF 6获取数据 基本上,我认为最简单的方法是有这样一个类: public class DataRetriever { public List<TEntity> GetAll<TEntity>() where TEntity : class { using (var Db = new Entity()) { return Db.Set<TEntity>(
public class DataRetriever
{
public List<TEntity> GetAll<TEntity>() where TEntity : class
{
using (var Db = new Entity())
{
return Db.Set<TEntity>().ToList();
}
}
}
公共类数据检索器
{
public List GetAll(),其中tenty:class
{
使用(var Db=new Entity())
{
返回Db.Set().ToList();
}
}
}
因此,您需要在指定要收集哪些数据的基础上开始创建其他类。比如说,我有一个狂欢节游乐项目的清单,其中一个方法就是乘坐一次或其他什么。那么我会有以下几点:
public class SelectedRide
{
int RideId { get; set; }
string RideName { get; set; }
string DomValue { get; set; }
public SelectedRide(DataRetriever Retriever)
{
var Records = Retriever.GetAll<vwRideList>();
var Record = from x in Records
where x.RideId == RideId
select x;
RideName = Record.Single().RideName;
DomValue = Record.Single().DomValue;
}
}
public类SelectedRide
{
int RideId{get;set;}
字符串RideName{get;set;}
字符串DomValue{get;set;}
public SelectedRide(数据检索器)
{
var Records=Retriever.GetAll();
var记录=从记录中的x开始
其中x.RideId==RideId
选择x;
RideName=Record.Single().RideName;
DomValue=Record.Single().DomValue;
}
}
骑乘ID是一个身份
因此,我们可以说,如果另一个类,比如说我们有多个游乐设施所在的公园,可以是公共类SelectedPark
,它将具有相同的逻辑,但在Retriever.GetAll()中代码>骑乘列表现在是停车列表。等等
如果我说需要进行50种不同类型的检索,我不知道这是否会很快失控。当然,我不知道这个项目的总范围,但是如果
我也见过类似回购模式的东西,但我不知道这是否有点浪费时间。我不知道我从中得到了什么。这似乎使其具有足够的通用性,因此我没有在一百万个不同的地方编写上下文。带有Get、GetById、Insert、Update、Delete的repo模式似乎足以满足最通用和最常见的CRUD操作。尤其是GetById,只要实体类符合基本接口(例如,ID字段名为“ID”,这在您的模型中是可控的),就可以普遍适用。@AnthonyPegram Gotcha,我想我需要阅读更多关于该模式的内容,因为我仍然迷茫,如果我仍然必须在某个时候映射回我的属性,在某个地方,我不是也遇到了类似的问题,试图保持通用性,但最终,我还是在努力节省开支。可能有点幼稚,我还是需要回去看看这个模式。@MZawg,与EntityFramework结合的存储库模式是一个反模式,EntityFramework已经是一个repository,您真正需要的只是一个简单的通用服务库,它可以处理您的CRUD操作,另外,每当我看到“return Db.Set().ToList();”这是一个大问题,这将导致您在筛选之前具体化所有数据。@MZawg我只有专有代码,但我可以给您一个详细说明。有一个处理CRUD的基本服务。如果您需要获得另一个实体,例如公园中有长椅。然后你为长凳等创建另一项服务。如果你需要过滤你的停车场,这似乎是你的问题。然后你必须在类中手动实现这些函数,或者你可以像我一样懒惰,只需添加一个动态过滤模块,就像是的,你要么必须使用某种动态过滤,要么最终必须编写一个过滤特定字段数据的函数,例如,用户希望找到所有具有pond etcA repo模式且带有Get、GetById、Insert、Update、Delete的公园,这些公园似乎足以进行最通用和最常见的CRUD操作。特别是,只要实体类符合基本接口(例如,ID字段名为“ID”),GetById就可以通用这在你的模型中是可控的。)@AnthonyPegram Gotcha,我想我需要更多地了解这个模式,因为我仍然迷路,如果我仍然必须映射回我的属性,那么在某个点上,在某个地方,我是否仍然会遇到类似的问题,试图保持通用性,然后最终,我仍在努力节省开支。可能有点幼稚,我还是需要回去看看这个模式。@MZawg,与EntityFramework结合的存储库模式是一个反模式,EntityFramework已经是一个repository,您真正需要的只是一个简单的通用服务库,它可以处理您的CRUD操作,另外,每当我看到“return Db.Set().ToList();”这是一个大问题,这将导致您在筛选之前具体化所有数据。@MZawg我只有专有代码,但我可以给您一个详细说明。有一个处理CRUD的基本服务。如果您需要获得另一个实体,例如公园中有长椅。然后你为长凳等创建另一项服务。如果你需要过滤你的停车场,这似乎是你的问题。然后你必须在类中手动实现这些函数,或者你可以像我一样懒惰,只需添加动态过滤模块,如Yeah,你要么必须使用某种动态过滤,要么最终必须编写一个函数来过滤某些字段的数据,例如,用户希望找到所有有池塘的公园等