gpt4 book ai didi

c# - 使用 Entity Framework 的 Repository 和 Unit Work 模式正确处理?

转载 作者:可可西里 更新时间:2023-11-01 09:06:26 25 4
gpt4 key购买 nike

干杯!我对使用 Unit of Work with Repository 有一些疑问。特别是 Entity Framework 中子上下文的作用。我搜索了很多关于这个主题的信息,但我发现的只是不同类型的使用模式,我很困惑,我无法理解主要思想。

1.应该在哪里实现配置和保存?- 是否正确实现了DbContext的Inheritance类中的Disposable?之后是在 Repository 和 Unit of Work 中还是在 Uni fo Work 中实现?

-将方法保存在工作单元或存储库中的何处?

我的存储库将是通用的我的代码在架构风格和其他细节方面是否正确?请告诉我我的想法是否错误。

    interface IRepository : IDisposable
{
void Create();
void Delete();
void Update();
void Get();
T getSomeByExpression()
...Some another costum operations
...should I remember about Save here?
}

class Repository : IRepository
{
SomeContext context = new SomeContext();
...Using using(context = new SomeContext()){} in functions??
...
....Disposing?
}

interface IUnitOfWork : IDisposable
{
...Which methods I should realize?
Commit()
Save()
...Need some another methods like rollback, Attach() Add() or Dispose or something else?
}
class UnitOfWork
{
...Collection of Repository

}

在逻辑级别的工作单元之后使用?请帮助我理解这个主题。

我想知道,如何正确地同时使用工作单元和存储库模式,尤其是包括 DBContext。我还想知道在何处使用一些操作,例如 Dispose。哪些操作一般应该在 UnitOfWork 中,Save 等。如何在存储库中配置上下文?

最佳答案

这是一个 great article关于使用 MVC 实现工作单元。

我通常会在业务交易完成后处理该设备。例如,如果操作是创建一个父级、一些子级并附加它们,我会在完成后立即处理。

添加了与上述相关的更多详细信息:

在重读你的问题时,听起来你想要更多关于工作单元理论的信息而不是实际实现,我很抱歉。

这是一篇更好的文章 on MSDN与此相关,但我会为您总结。

According to Martin Fowler, the Unit of Work pattern "maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems."

通常,我使用工作单元模式将所有相关的存储库集中在一起,以解决并发问题,同时仍然保持存储库独立。

One of the best ways to use the Unit of Work pattern is to allow disparate classes and services to take part in a single logical transaction. The key point here is that you want the disparate classes and services to remain ignorant of each other while being able to enlist in a single transaction.

  • “我应该在哪里实现处置和保存?”

我不确定我是否完全理解您的问题,但我认为您是在问什么应该管理工作单元的生命周期?

这是另一个 SO post与此相关,但摘要是目前拥有工作单元的任何内容,并且与您如何设置工作单元的范围有关。例如,它可以是业务命令,也可以是 MVC 操作。

  • “在DbContext的Inheritance类中是否正确实现了Disposable?之后是在Repository和Unit of Work中还是在Uni fo Work中实现?”

你的意思是,你应该在哪里处理 DbContext?我认为它应该在工作单元中。如果您在单个工作单元中创建/处理多个上下文,也许您应该将它们分成 2 个不同的单元。

  • 将方法 Save 放在 Unit of Work 或 Repository 中的什么地方?

您的工作单元是处理上下文和事务,并且应该包含防止重复更新的逻辑,因此您的保存功能应该由您的工作单元控制。

关于c# - 使用 Entity Framework 的 Repository 和 Unit Work 模式正确处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11809979/

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