gpt4 book ai didi

asp.net-mvc - DbContext - 存储库和工作单元模式的组合?

转载 作者:行者123 更新时间:2023-12-02 03:47:45 24 4
gpt4 key购买 nike

想知道我是否可以在这里得到一点指导。在 DbContext 的 MSDN 页面 ( http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext%28v=vs.103%29.aspx ) 中,它指出:“代表工作单元和存储库模式的组合,使您能够查询数据库并将更改组合在一起,然后将这些更改作为一个单元写回存储”

我对存储库模式的理解是它提供了对数据持久层的抽象。与 EF 耦合的具体实现如何被视为抽象?

此外,我如何将其用作工作单元模式?目前,我的工作单元有一个 ObjectContext 属性,我的每个存储库都有一个属性:

public class UnitOfWork : IUnitOfWork
{
private TPSEntities _context = new TPSEntities();
private ICustomerRepository _customerRepository;
private IUsersRepository _UsersRepository;

public ICustomerRepository CustomerRepository
{
get
{
if (_customerRepository == null)
{
_customerRepository = new CustomerRepository(_context);
}
return _customerRepository;
}
}

public IUsersRepository UsersRepository
{
get
{
if (_UsersRepository == null)
{
_UsersRepository = new UsersRepository(_context);
}
return _UsersRepository;
}
}


public void Save()
{
_context.SaveChanges();
}

public void Save(string storedProcedure)
{
_context.SaveChanges();
//_context.ExecuteStoreCommand
}

private bool disposed = false;

protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_context.Dispose();
}
}
this.disposed = true;
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

然后我通过 DI 将我的工作单元对象注入(inject)到我的 Controller 中,然后离开。

使用 DbContext 有更好的方法吗?

谢谢,

克里斯

最佳答案

实际上,DbContext 是对数据库的抽象 - Microsoft 的 SQL 引擎有多种形式,都可以直接与 EF 一起使用,如果您在代码中使用 EF,那么在引擎之间切换时唯一需要更改的就是连接字符串。

也就是说,需要另一个抽象并不罕见,这次是通过 ORM 工具 - 在您的例子中是 EF。我发现大多数指南、博客文章等都展示了存储库模式,也通过抽象 ORM 工具来实现。在您提供的代码中,您也是。

我想这归结为您对“数据库层”和“存储库”的定义——尽管我确信文献中有严格的定义,但这些定义在整个互联网上并不一致。 (惊讶?:P)

关于asp.net-mvc - DbContext - 存储库和工作单元模式的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15810604/

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