首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将EF与BLL分离

将EF与BLL分离
EN

Stack Overflow用户
提问于 2016-09-28 13:05:20
回答 1查看 230关注 0票数 1

我写了下面这段数据库事务包装器:

代码语言:javascript
复制
 public class ExampleWrapper : IDisposable
    {
        public DbContextTransaction Transaction { get; set; }
        public DcatContext DatabaseContext { get; set; }

        public ExampleWrapper ()
        {
            DatabaseContext = new someContext();
            Transaction = DatabaseContext.Database.BeginTransaction();
        }


        public void Dispose()
        {
          Transaction.Dispose();                      
        }


        public void Commit()
        {
           Transaction.Commit();

        }

        public void RollBack()
        {
            Transaction.Rollback();
        }
    }

我的DAL中有类似以下代码的代码:

代码语言:javascript
复制
public async Task<Object> Retrieve(string Id)
        {

            using (var context= new  SomeContext())
            {
                return Context.Object.Find(id);
            }
        }

我试图将业务层与任何实体框架依赖项分开,这就是包装器类的原因。如果我尝试从BLL执行事务,例如:

代码语言:javascript
复制
using(var wrapper = new ExampleWrapper())
{
     //make calls to the DAL 
       something.Retrieve(Id)
}

我的问题是,我初始化了Dbcontext两次(这里是在创建事务时,也是在DAL中)。你们有什么建议可以让我把这件事做得更好?

PS:以在事务中使用retrieve为例。

EN

回答 1

Stack Overflow用户

发布于 2016-09-28 14:23:23

您可以使用依赖注入(例如,Ninject)将DbContext注入到包装器中。然后,您可以定义DBContext实例的生命周期。如果它是web应用程序,那么您可以将DbContext的生命周期定义为在Web请求(InRequestScope)的生命周期内,以便在Web请求结束后自动处理DbContext。

您将不再需要创建DbContext,因为Ninject会为您创建它并管理其处置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39738459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档