C# 为我的web应用程序实现通用存储库是很难实现的
我正在阅读以下关于在asp.net mvc&EF中创建通用存储库以执行CRUD操作的教程,如下所示:-C# 为我的web应用程序实现通用存储库是很难实现的,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,我正在阅读以下关于在asp.net mvc&EF中创建通用存储库以执行CRUD操作的教程,如下所示:- using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Data.Entity; using ContosoUniversity.Models; using System.Linq.Expressions; namespace ContosoUnive
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.Entity;
using ContosoUniversity.Models;
using System.Linq.Expressions;
namespace ContosoUniversity.DAL
{
public class GenericRepository<TEntity> where TEntity : class
{
internal SchoolContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(SchoolContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
public virtual TEntity GetByID(object id)
{
return dbSet.Find(id);
}
public virtual void Insert(TEntity entity)
{
dbSet.Add(entity);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统数据;
使用System.Data.Entity;
使用ContosoUniversity.模型;
使用System.Linq.Expressions;
名称空间ContosoUniversity.DAL
{
公共类GenericRepository,其中tenty:类
{
学校内部语境;
内部数据库集;
公共一般报告(学校背景)
{
this.context=上下文;
this.dbSet=context.Set();
}
公共虚拟IEnumerable Get(
表达式筛选器=空,
Func orderBy=null,
字符串includeProperties=“”)
{
IQueryable query=dbSet;
if(过滤器!=null)
{
query=query.Where(过滤器);
}
foreach(includeProperty.Split中的var includeProperty
(新字符[]{',},StringSplitOptions.RemoveEmptyEntries)
{
query=query.Include(includeProperty);
}
if(orderBy!=null)
{
returnorderby(query.ToList();
}
其他的
{
返回query.ToList();
}
}
公共虚拟实体GetByID(对象id)
{
返回dbSet.Find(id);
}
公共虚拟空白插入(TEntity实体)
{
添加(实体);
}
}
}
但在真实的web项目中,添加/编辑/删除/查找操作可能不是非常简单和标准,因为不同的实体可能需要在这些方法中执行不同的操作
例如,目前在我的资产管理asp.net mvc web应用程序中,我有一个用于添加新服务器实体的存储库方法,我在其中执行以下主要操作:-
- 创建通用技术对象并自动生成标记号
- 创建新的审核记录
- 创建一个新服务器李>
- 等
谢谢我们为什么要使用通用存储库?因为我们有共同的需求,我们希望用更少的代码重复来实现这些需求。如果我们有一个存储库,其中的需求不适合这种通用模式,该怎么办?然后,我们不会试图强迫这个存储库进入一个它不适合的模式
设计模式的目的是在需求符合模式的情况下提供一些可能的通用解决方案。这样做的目的不是停止思考设计,也不是试图将所有内容强制纳入模式。我们为什么要使用通用存储库?因为我们有共同的需求,我们希望用更少的代码重复来实现这些需求。如果我们有一个存储库,其中的需求不适合这种通用模式,该怎么办?然后,我们不会试图强迫这个存储库进入一个它不适合的模式
设计模式的目的是在需求符合模式的情况下提供一些可能的通用解决方案。这样做的目的不是停止思考设计,也不是试图将所有内容强制纳入模式。我们为什么要使用通用存储库?因为我们有共同的需求,我们希望用更少的代码重复来实现这些需求。如果我们有一个存储库,其中的需求不适合这种通用模式,该怎么办?然后,我们不会试图强迫这个存储库进入一个它不适合的模式
设计模式的目的是在需求符合模式的情况下提供一些可能的通用解决方案。这样做的目的不是停止思考设计,也不是试图将所有内容强制纳入模式。我们为什么要使用通用存储库?因为我们有共同的需求,我们希望用更少的代码重复来实现这些需求。如果我们有一个存储库,其中的需求不适合这种通用模式,该怎么办?然后,我们不会试图强迫这个存储库进入一个它不适合的模式
设计模式的目的是在需求符合模式的情况下提供一些可能的通用解决方案。这样做的目的不是停止思考设计,也不是试图将所有内容强制纳入模式。我在应用程序中使用了通用存储库模式。它让我实现了对依赖于组织的实体的过滤,一个软删除和撤销-所有这些都没有代码重复。若我需要添加审计,那个么我将把它添加到我的通用存储库中,并确信所有实体都将被审计。就我而言,创建通用存储库让我添加了
DbSet
实现中不存在的相当复杂的行为
当我对一个实体有额外或不同的需求时,我会继承通用存储库,并在子类中添加或重写行为。这也让我添加了相当复杂的需求
DbContext/DbSet
是工作单元/存储库模式的一个简单实现,但将其包装在自己的代码中有助于我以最少的代码添加复杂的需求。我在应用程序中使用了通用存储库模式。它让我在组织部门实施过滤