标签: unit-of-work

WebApi DI Autofac - 确保控制器具有无参数的公共构造函数

我正在使用依赖注入编写web api,在存储库的帮助下工作单元和Autofac作为容器.依赖性在24小时前被完美注入,但突然间,当我今天开始工作时,我一直收到错误

"消息":"发生错误.","ExceptionMessage":"尝试创建'SearchController'类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.","ExceptionType":" System.InvalidOperationException"

我将包括我的签名以及我如何注册类型,如果有人可以指出我的代码可能出错,我将非常高兴.

在我的网络api控制器上,我有

 private IUnitOfWork<Listing> _unitOfWork = null;
 public SearchController(IUnitOfWork<Listing> unitOfWork)
 {
     _unitOfWork = unitOfWork;
 }
Run Code Online (Sandbox Code Playgroud)

工作单元采用泛型类型参数来创建存储库.

在我的WebApiConfig.cs中,我正在注册以下类型

 builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
 builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency();
 builder.RegisterType(typeof(SearchController)).UsingConstructor(typeof(IUnitOfWork<Listing>));
Run Code Online (Sandbox Code Playgroud)

我正在注册SearchController以使用接受IUnitOfWork <>的构造函数.在我添加Mocked单元测试之前一切正常,但出于某种目的,我现在继续得到这个错误.我还注册了DependencyResolver

var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
config.DependencyResolver = resolver;
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection unit-of-work autofac asp.net-web-api2

8
推荐指数
1
解决办法
6042
查看次数

工作单元属于EF4,IoC(Unity)和存储库?

我看到几个与此有关的问题,但我仍然无法找到我正在寻找的答案,所以我发布了我的问题.如果另一个问题得到答案(我只是没有看到),请指出我.

我正在试图找出我的UnitOfWork所属的位置 - 特别是,在使用EF4和Unity与Repository模式时创建.

基本上,我有一个用于实现我的业务逻辑的服务.此服务构造函数接收存储库,因此服务将注入我的存储库.然后,该服务使用注入的存储库对数据存储执行操作 - 但我需要将它们包含在一个工作单元中.

但是,我的工作单元需要注入EF4上下文(或者,在我的情况下,和上下文的接口 - IObjectContext).而且我不确定UoW应该在哪里创建并注入上下文.

以下是我能想到的可能选项,其中没有一个看起来很理想:

  • 在服务构造函数中包含UoW,从而使用工作单元注入服务,然后使用我的EF4上下文注入.但这似乎是错误的,因为我不想在存储库的每个实例上创建我的UoW.

  • 使用container.Resolve进行按需创建以获取UoW的实例,注入我的EF4上下文.这似乎过于不得不经常点击IoC容器,而不是已经有权访问UoW.

  • 将上下文直接注入服务,允许我创建UoW(上下文).这看起来很糟糕,因为我现在已经将上下文暴露给服务,这应该被隔离到存储库.

所以我的问题是,这些方法中的一种是可以接受的,还是有其他方法我没想到?

提前致谢.

entity-framework repository ioc-container unity-container unit-of-work

7
推荐指数
1
解决办法
3957
查看次数

在ASP.NET MVC中实现存储库模式

我仍然很难绕过这个.我想像我这样分开我的图层(dll):

1)MyProject.Web.dll - MVC Web App(控制器,模型(编辑/查看),视图)
2)MyProject.Services.dll - 服务层(业务逻辑)
3)MyProject.Repositories.dll - 存储库
4)MyProject. Domain.dll - POCO类
5)MyProject.Data.dll - EF4

工作流程:

1)控制器调用服务以获取对象以填充视图/编辑模型.
2)服务调用存储库来获取/持久化对象.
3)存储库调用EF以从SQL Server获取/持久化对象.

我的存储库返回IQueryable(Of T),在其中它们使用ObjectSet(Of T).

所以我看到这一点,图层完全依赖于下一层和包含POCO类的lib?

一些问题:

1)现在我的存储库与EF一起正常工作,它们将依赖于System.Data.Objects,现在我在我的存储库层与EF紧密耦合,那是不是很糟糕?

2)我正在使用UnitOfWork模式.那住哪儿?它有一个Property Context As ObjectContext,因此它也与EF紧密耦合.坏?

3)我如何使用DI使这更容易?

我希望这是一个松散耦合的测试.有什么建议?

----------编辑----------

如果我在这里正确的轨道,请告诉我.另外,因此服务器注入一个IRepository(Of Category)权限,它如何知道它与EFRepository(Of T)的具体类之间的区别?与UnitOfWork和服务相同?

一旦有人帮助我把它弄清楚到我所理解的地方,我知道它看起来似乎微不足道,但是男人,我有一个时间包围我的头!

调节器

Public Class CategoryController
    Private _Service As Domain.Interfaces.IService

    Public Sub New(ByVal Service As Domain.Interfaces.IService)
        _Service = Service

    End Sub

    Function ListCategories() As ActionResult
        Dim Model As New CategoryViewModel

        Using UOW As New Repositories.EFUnitOfWork
            Mapper.Map(Of Category, CategoryViewModel)(_Service.GetCategories)
        End Using

        Return …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc unit-of-work repository-pattern service-layer entity-framework-4

7
推荐指数
1
解决办法
4001
查看次数

在没有存储库的实体框架中可重用查询.怎么样?

让我说,我已经得出结论(经过大量试验),使用实体框架时,存储库和工作单元是错误的,错误的,错误的,这就说明了为什么这么好.

但我真的很讨厌这些嵌入式查询.问题是,如果我是如此反对存储库等,我可以在哪里放置它们?(只有请干净的答案,非常感谢的例子).

我刚刚完成了两个包含我的存储库,工作单元和数百个文件接口的项目,因为回报无处可见.我认为很多人,包括我自己,只是跳上了Repository的潮流,因为这是其他所有人都在做的事情,但回想起来,我认为这真是一个无处可去的地方.

/叹

理查德

entity-framework unit-of-work repository-pattern

7
推荐指数
1
解决办法
2333
查看次数

从服务或回购中分离工作单元

我试图将我的工作单元与我的服务或存储库分离,以便每当我想添加新服务时,我都不必触摸UoW代码.我该怎么做呢?

_categoryService = _unitOfWork.Get<ICategoryService>();
Run Code Online (Sandbox Code Playgroud)

而不是

_unitOfWork.CategoryService.Add(category)
Run Code Online (Sandbox Code Playgroud)

我可以说;

_categoryService.Add(category);
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller interface unit-of-work repository-pattern

7
推荐指数
1
解决办法
3860
查看次数

工作单位,存储库和IDisposable

我一直在寻找在我正在开发的项目中实现这些模式.UoW具有数据库上下文,然后使用该上下文实例化许多存储库.我的问题是处理上下文.我见过很多文章都将存储库作为IDisposable,然后处理上下文.这让我感到困惑,我错过了什么,或者(在我的情况下)是否只是处理上下文的UoW?另外,我应该在我的存储库中实现IDisposable吗?

谢谢

克里斯

entity-framework unit-of-work repository-pattern

7
推荐指数
1
解决办法
2892
查看次数

无法执行事务操作,因为存在处理此事务的待处理请求

我收到的错误是:

提交数据库事务时报告了错误,但无法确定数据库服务器上的事务是成功还是失败.有关详细信息,请参阅内部异常和http://go.microsoft.com/fwlink/?LinkId=313468.

无法执行事务操作,因为存在处理此事务的待处理请求.

我正在尝试使用MapStoredProcedure方法使用Entity Frameowrk将数据插入数据库.

我的代码:

this.MapToStoredProcedures(e => e.Insert(v => v.HasName("uspInsertUser").Result(rs => rs.UserId, "UserId")));

 public ActionResult Add(User userDetails)
        {
            try
            {
                _unitOfWorkAsync.BeginTransaction();

                _userService.Insert(userDetails);
                _unitOfWorkAsync.SaveChangesAsync();

                _unitOfWorkAsync.Commit(); // This line gives error
                ModelState.Clear();    

                return View("Add");
            }
            catch (Exception ex)
            {
                _unitOfWorkAsync.Rollback();
                throw ex;
            }
Run Code Online (Sandbox Code Playgroud)

最奇怪的是,如果我保留断点并调试代码,同时插入成功插入.

但是,当我插入没有启用任何断点时,它给我上面的错误.任何帮助表示赞赏.

c# transactions repository unit-of-work entity-framework-6

7
推荐指数
0
解决办法
7536
查看次数

如何使用ADO.NET使用存储库和工作单元模式?

我正在构建ASP.NET MVC 5应用程序.

我读到工作库和单元(UOW)模式在这里.

这些示例使用Entity Framework,它本身添加了高级抽象.

我使用的是ADO.NET而不是EF.我想知道:

  1. Repository和UoW模式是否与ADO.NET有任何关系?
  2. 我的存储库和UoW如何看待ADO.NET?任何样品?
  3. 我可以为Repository添加一个单独的类库,还是让它成为DAL的一部分?

asp.net-mvc ado.net design-patterns unit-of-work repository-pattern

7
推荐指数
1
解决办法
7908
查看次数

转换动态对象并传递到UnitOfWork和Repository模式.抛出异常

这是一个非常具体的问题.不太确定如何说出来.基本上我正在实现工作单元和存储库模式,我有一个动态对象,我转换为int,但如果我使用var它将在尝试调用方法时抛出异常.

我试图删除所有这些问题,我可以解决这个问题.出于某种原因,我只看到这两种设计模式.我得到的例外是Additional information: 'BlackMagic.ITacoRepo' does not contain a definition for 'DoStuff'

这是代码:

class BlackMagic
{
    static void Main(string[] args)
    {
        dynamic obj = new ExpandoObject();
        obj.I = 69;

        UnitOfWork uow = new UnitOfWork();

        int i1 = Convert.ToInt32(obj.I);
        var i2 = Convert.ToInt32(obj.I);

        if(i1.Equals(i2))
        {
            uow.TacoRepo.DoStuff(i1); // Works fine
            uow.TacoRepo.DoStuff(i2); // Throws Exception
        }
    }
}

class UnitOfWork
{
    public ITacoRepo TacoRepo { get; set; }

    public UnitOfWork()
    {
        TacoRepo = new TacoRepo();
    }
}

class Repo<T> : IRepo<T> …
Run Code Online (Sandbox Code Playgroud)

c# unit-of-work repository-pattern expandoobject dynamicobject

7
推荐指数
1
解决办法
459
查看次数

如何使用 UnitOfWork 模式从 Add 中获取 id?

我正在使用 UnitOfWork 模式来抽象我的 Asp.Net 应用程序中的数据库访问。基本上我遵循此处描述的 UnitOfWork 模式方法:

https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/

但是,我很难理解,我将如何获得新添加项目的 ID。就像我想向我的客户存储库添加新客户一样,我将如何获得客户 ID?问题是Add和Commit是解耦的,直到Commit之后才知道Id。

有没有办法使用 UnitOfWork 模式获取添加项的 id?

c# asp.net asp.net-mvc entity-framework unit-of-work

7
推荐指数
1
解决办法
6567
查看次数