gpt4 book ai didi

c# - 使用存储库模式 MVC 5 和 EF 6 的工作单元

转载 作者:太空狗 更新时间:2023-10-29 21:22:41 24 4
gpt4 key购买 nike

<分区>

我根据自己的理解整理了一个示例,说明我如何使用工作单元和存储库模式。谁能告诉我我是否以正确的方式实现?如果不是,我该如何改进?

提前致谢,非常感谢。

我有一个包含两个实体的 EF 模型:主题和子主题。 EF 模型称为 CommonGood。

工作单元:

/// <summary>
/// Implementation of a UnitOfWork class
/// </summary>
public static class UnitOfWork
{
/// <summary>
/// Gets the default context
/// </summary>
/// <returns>A new instance of the default context</returns>
public static CommonGoodEntities GetContext()
{
return new CommonGoodEntities();
}
}

IGenericRepository:

public interface IRepository<T>
{
/// <summary>
/// Gets all entities
/// </summary>
/// <returns>All entities</returns>
IEnumerable<T> GetAll();

/// <summary>
/// Gets all entities matching the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>All entities matching the predicate</returns>
IEnumerable<T> GetAll(Expression<Func<T, bool>> predicate);

/// <summary>
/// Set based on where condition
/// </summary>
/// <param name="predicate">The predicate</param>
/// <returns>The records matching the given condition</returns>
IQueryable<T> Where(Expression<Func<T, bool>> predicate);

/// <summary>
/// Finds an entity matching the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>An entity matching the predicate</returns>
IEnumerable<T> Find(Expression<Func<T, bool>> predicate);

/// <summary>
/// Determines if there are any entities matching the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>True if a match was found</returns>
bool Any(Expression<Func<T, bool>> predicate);

/// <summary>
/// Returns the first entity that matches the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>An entity matching the predicate</returns>
T First(Expression<Func<T, bool>> predicate);

/// <summary>
/// Returns the first entity that matches the predicate else null
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>An entity matching the predicate else null</returns>
T FirstOrDefault(Expression<Func<T, bool>> predicate);

/// <summary>
/// Adds a given entity to the context
/// </summary>
/// <param name="entity">The entity to add to the context</param>
void Add(T entity);

/// <summary>
/// Deletes a given entity from the context
/// </summary>
/// <param name="entity">The entity to delete</param>
void Delete(T entity);

/// <summary>
/// Attaches a given entity to the context
/// </summary>
/// <param name="entity">The entity to attach</param>
void Attach(T entity);
}

通用存储库:

public class GenericRepository<T> : IRepository<T> where T : class
{
/// <summary>
/// The database context for the repository
/// </summary>
private DbContext _context;

/// <summary>
/// The data set of the repository
/// </summary>
private IDbSet<T> _dbSet;

/// <summary>
/// Initializes a new instance of the <see cref="GenericRepository{T}" /> class.
/// </summary>
/// <param name="context">The context for the repository</param>
public GenericRepository(DbContext context)
{
this._context = context;
this._dbSet = this._context.Set<T>();
}

/// <summary>
/// Gets all entities
/// </summary>
/// <returns>All entities</returns>
public IEnumerable<T> GetAll()
{
return this._dbSet;
}

/// <summary>
/// Gets all entities matching the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>All entities matching the predicate</returns>
public IEnumerable<T> GetAll(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
return this._dbSet.Where(predicate);
}

/// <summary>
/// Set based on where condition
/// </summary>
/// <param name="predicate">The predicate</param>
/// <returns>The records matching the given condition</returns>
public IQueryable<T> Where(Expression<Func<T, bool>> predicate)
{
return this._dbSet.Where(predicate);
}

/// <summary>
/// Finds an entity matching the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>An entity matching the predicate</returns>
public IEnumerable<T> Find(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
return this._dbSet.Where(predicate);
}

/// <summary>
/// Determines if there are any entities matching the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>True if a match was found</returns>
public bool Any(Expression<Func<T, bool>> predicate)
{
return this._dbSet.Any(predicate);
}

/// <summary>
/// Returns the first entity that matches the predicate
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>An entity matching the predicate</returns>
public T First(Expression<Func<T, bool>> predicate)
{
return this._dbSet.First(predicate);
}

/// <summary>
/// Returns the first entity that matches the predicate else null
/// </summary>
/// <param name="predicate">The filter clause</param>
/// <returns>An entity matching the predicate else null</returns>
public T FirstOrDefault(Expression<Func<T, bool>> predicate)
{
return this._dbSet.FirstOrDefault(predicate);
}

/// <summary>
/// Adds a given entity to the context
/// </summary>
/// <param name="entity">The entity to add to the context</param>
public void Add(T entity)
{
this._dbSet.Add(entity);
}

/// <summary>
/// Deletes a given entity from the context
/// </summary>
/// <param name="entity">The entity to delete</param>
public void Delete(T entity)
{
this._dbSet.Remove(entity);
}

/// <summary>
/// Attaches a given entity to the context
/// </summary>
/// <param name="entity">The entity to attach</param>
public void Attach(T entity)
{
this._dbSet.Attach(entity);
}
}

Controller :

public class HomeController : Controller
{
/// <summary>
/// The context used for the controller
/// </summary>
private DbContext _context;

/// <summary>
/// Initializes a new instance of the <see cref="HomeController"/> class.
/// </summary>
public HomeController()
{
this._context = UnitOfWork.GetContext();
}

public JsonResult GetTopics()
{
var topics = new GenericRepository<Topic>(this._context).GetAll().ToList();
return this.Json(topics, JsonRequestBehavior.AllowGet);
}

/// <summary>
/// Disposes of the context if the currently disposing
/// </summary>
/// <param name="disposing">A value indicating whether or not the application is disposing</param>
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._context.Dispose();
}

base.Dispose(disposing);
}
}

本质上,我想确保以正确的方式访问数据并确保我没有忽略任何内容。再次感谢!

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com