Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架,如何使其更通用,编写更少的代码_C#_Entity Framework 6 - Fatal编程技术网

C# 实体框架,如何使其更通用,编写更少的代码

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>(

因此,我正在编写一个程序,并使用EF 6获取数据

基本上,我认为最简单的方法是有这样一个类:

  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,你要么必须使用某种动态过滤,要么最终必须编写一个函数来过滤某些字段的数据,例如,用户希望找到所有有池塘的公园等