gpt4 book ai didi

asp.net-mvc - Entity Framework 6 提供开箱即用的存储库和 UoW

转载 作者:行者123 更新时间:2023-12-04 15:10:58 26 4
gpt4 key购买 nike

但是你如何使用它?

我有一个 Code First项目设置,并使用这个新的 EF6 尝试一些东西。阅读至少 2 岁关于 EF4/5 的各种帖子/博客。但是关于 EF6 什么都没有。

假设我有这些实体:

public DbSet<Person> Persons { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<Invoice> Invoices { get; set; }

我还需要为每个实体创建存储库吗?或者 class除了 CRUD 之外,用一些方法来做一些自定义计算就足够了吗?

我知道这一行:
kernel.Bind<MyDbContext>().ToSelf().InRequestScope();
DI 就足够了,并且它将通过构造函数注入(inject)到适用的上层类。

项目有一个类库和一个web项目 asp.net-mvc .类库项目包含我的实体并具有 Migrations启用。

非常感谢您对此事的任何了解。

最佳答案

我在几个项目中在 EF 之上添加了一个 Repository 层(它在其构造中固有地利用了 Repository 和 UoW 模式),并且我已经使用一个使用泛型的类来做到这一点,因此我只需要一个文件我所有的实体。您可以决定是否要这样做,但我发现它在我的项目中很有用。

我的存储库通常像我在下面显示的那样开始,如果/当我遇到对它们的需求时,会跟进更多的扩展方法(显然我没有展示所有这些,这取决于你决定如何实现您的存储库)。

public class Repository<T> : IRepository<T> where T : class
{
protected IDbContext Context;
protected DbSet<T> DbSet { get { return Context.Set<T>(); } }

public Repository(IDbContext context = null)
{
Context = context ?? new DbContext();
}

public void Add(T newRecord)
{
DbSet.Add(newRecord);
}

public void Update(T record)
{
var entry = Context.Entry(record);
DbSet.Attach(record);
entry.State = EntityState.Modified;
}

public void Remove(T record)
{
Context.Entry(record).State = EntityState.Deleted;
DbSet.Remove(record);
}

public IQueryable<T> Where(Expression<Func<T, bool>> predicate)
{
return DbSet.Where(predicate);
}

public bool Contains(Expression<Func<T, bool>> predicate)
{
return DbSet.Count(predicate) > 0;
}

public int Count(Expression<Func<T, bool>> predicate)
{
return DbSet.Count(predicate);
}

public int Save()
{
return Context.SaveChanges();
}
}

我使用存储库有两个主要原因:
  • 单元测试。使用这种模式可以让我伪造底层数据,而不必在我的数据库中有坏数据。我需要做的只是创建 IRepository 的另一个实现它使用内存列表作为其数据源,我已经准备好让我的页面查询该存储库。
  • 可扩展性。很多次我将一些方法放入我的存储库,因为我发现自己不断地在 Controller 中对查询执行相同的逻辑。这非常有用,特别是因为您的客户端代码不需要知道它是如何做的,只需知道它正在做(如果您需要更改一个文件与多个文件的逻辑,这将更容易) )。

  • 显然,这不是全部,但这对于这个答案应该足够了。如果您想了解有关此主题的更多信息,我确实写了一篇关于您的博客文章 can find here .

    无论你决定做什么,祝你好运。

    关于asp.net-mvc - Entity Framework 6 提供开箱即用的存储库和 UoW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27492329/

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