相关疑难解决方法(0)

实体框架和连接池

我最近开始在我的.NET 4.0应用程序中使用Entity Framework 4.0,并对与池化相关的一些事情感到好奇.

  1. 据我所知,连接池由ADO.NET数据提供程序管理,在我的情况下是MS SQL服务器.当您实例化新的实体context(ObjectContext)时,这是否适用,即无参数new MyDatabaseModelEntities()?

  2. a)为应用程序创建全局实体上下文(即一个静态实例)或b)使用using块为每个给定操作/方法创建和公开实体上下文有哪些优点和缺点.

  3. 我应该了解的某些场景的任何其他建议,最佳实践或常用方法?

.net database ado.net entity-framework connection-pooling

264
推荐指数
3
解决办法
11万
查看次数

Unity中的Singleton Per Call上下文(Web请求)

几天前,我遇到了ASP.Net线程的这个问题.我希望每个Web请求都有一个单例对象.我的工作单位实际上需要这个.我想为每个Web请求实例化一个工作单元,以便身份映射在整个请求中有效.这样我就可以使用IoC透明地将我自己的IUnitOfWork注入到我的存储库类中,并且我可以使用相同的实例来查询然后更新我的实体.

由于我使用Unity,我错误地使用了PerThreadLifeTimeManager.我很快意识到ASP.Net线程模型不支持我想要实现的目标.基本上它使用theadpool并回收线程,这意味着每个线程我得到一个UnitOfWork!但是,我想要的是每个Web请求的一个工作单元.

一些谷歌搜索给了我这个伟大的帖子.这正是我想要的; 除了非常容易实现的统一部分.

这是我对PerCallContextLifeTimeManager实现统一的实现:

public class PerCallContextLifeTimeManager : LifetimeManager
{
    private const string Key = "SingletonPerCallContext";

    public override object GetValue()
    {
        return CallContext.GetData(Key);
    }

    public override void SetValue(object newValue)
    {
        CallContext.SetData(Key, newValue);
    }

    public override void RemoveValue()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,我使用它来使用与此类似的代码注册我的工作单元:

unityContainer
            .RegisterType<IUnitOfWork, MyDataContext>(
            new PerCallContextLifeTimeManager(),
            new InjectionConstructor());
Run Code Online (Sandbox Code Playgroud)

希望能节省一些时间.

asp.net singleton unity-container unit-of-work lifetime

45
推荐指数
2
解决办法
2万
查看次数

Unity Lifetime Managers和EF Data Context - >最佳实践

所有,

有很多关于Unity Lifetime Managers的帖子,但是我还没有发现有人说"在这些情况下你应该总是使用X"这是一个很好的经验法则.让我描述一下我的应用程序,我有一个ASP.NET MVC 4 Web应用程序.我有一个包含3个项目的Visual Studio解决方案,我的'Core'项目,包含我的所有EF内容,测试项目和MVC Web项目.我使用Unity进行依赖注入,现在有以下代码:

// Context
container.RegisterType<IDatabaseFactory, DatabaseFactory>(
    new ContainerControlledLifetimeManager();
container.RegisterType<UnitOfWork>(
    new ContainerControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud)

但是,我注意到我的上下文没有重新创建每个新的Web请求,这是我认为我想要的(如果我在这个假设中错了,请告诉我).我很难分析下面列出的网站中的所有信息,并且已经阅读了很多人创建自己的名为PerHttpRequestLifetimeManager的类来处理这个问题.

这里最好的做法是什么?

  1. 通过Microsoft的开发人员网络了解终身经理 - http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. 通过CodeProject与Lifetime Manager进行MVC DI和Unity - http://www.codeproject.com/Articles/424743/MVC-DI-Unity-with-Lifetime-Manager
  3. ASP.NET MVC提示:通过Shiju Varghese博客使用Unity应用程序块进行依赖注入 - http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with -unity-应用block.aspx
  4. MVC,EF - 通过堆栈溢出在Unity中的DataContext单例实例Per-Web-Request - MVC,EF - 在Unity中的DataContext单例实例Per-Web-Request
  5. 通过堆栈溢出向Unity 注入多个类型的相同DataContext实例 - 使用Unity在多个类型中注入相同的DataContext实例

entity-framework dependency-injection unity-container httprequest asp.net-mvc-4

11
推荐指数
1
解决办法
1万
查看次数

New ApplicationDbContext()vs HttpContext.GetOwinContext().Get <ApplicationDbContext>();

我对哪种方式更好以及使用哪种方式感到困惑.当然,如果你总能得到HttpContext.GetOwinContext().Get() ; 那为什么甚至创建一个新的ApplicationDbContext并冒险加倍对象等?

注意:我在这里专门谈论Web应用程序.

c# asp.net asp.net-mvc entity-framework asp.net-identity

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

将linq连接到sql datacontext到业务层中的httpcontext

我需要我的linq to sql datacontext在我的业务/数据层可用,以便我的所有存储库对象都可以访问.但是,由于这是一个Web应用程序,我想根据请求创建并销毁它.我想知道是否有一个可以懒惰创建并将datacontext附加到当前HttpContext的单例类可以工作.我的问题是:当请求结束时,datacontext会自动处理吗?以下是我正在思考的代码.这是否达到了我的目的:拥有一个可以延迟使用的线程安全的datacontext实例,并在请求结束时自动处理?

public class SingletonDC
{
    public static NorthwindDataContext Default
    {
        get
        {
            NorthwindDataContext defaultInstance = (NorthwindDataContext)System.Web.HttpContext.Current.Items["datacontext"];
            if (defaultInstance == null)
            {
                defaultInstance = new NorthwindDataContext();
                System.Web.HttpContext.Current.Items.Add("datacontext", defaultInstance);
            }
            return defaultInstance;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net datacontext linq-to-sql

6
推荐指数
1
解决办法
2426
查看次数

Unity,RegisterType <>和Singleton对象

我正在使用Unity来实例化一些对象,我发现无论我尝试什么,Unity都会为我的对象创建单例.

根据文档:http: //msdn.microsoft.com/en-us/library/dd203242.aspx#Y500

使用以下代码,我应该在每次接口解析时获得不同的实例.

IUnityContainer myContainer = new UnityContainer();  

// Register a default (un-named) type mapping with a transient lifetime  
myContainer.RegisterType<IMyObject, MyRealObject>();  
// Following code will return a new instance of MyRealObject  
myContainer.Resolve<IMyObject>();  
Run Code Online (Sandbox Code Playgroud)

但相反,我得到一个单例实例.

以下是我的声明.Global.asax中

// This should get me a singleton  
container.RegisterType<IRetailerService, RetailerService>(new ContainerControlledLifetimeManager(), new InjectionConstructor());  
// This is the one giving me trouble.
container.RegisterType<IInStoreRetailersViewModelBuilder, InStoreRetailersViewModelBuilder>(new InjectionConstructor(container.Resolve<IRetailerService>()));  
container.RegisterType<CollectController>(new InjectionConstructor(container.Resolve<IInStoreRetailersViewModelBuilder>()));  
Run Code Online (Sandbox Code Playgroud)

调节器

private readonly IInStoreRetailersViewModelBuilder _inStoreRetailersViewModelBuilder;  

public CollectController(IInStoreRetailersViewModelBuilder inStoreRetailersViewModelBuilder)  
{  
    this._inStoreRetailersViewModelBuilder = inStoreRetailersViewModelBuilder;  
}  

public ActionResult Index()  
{ …
Run Code Online (Sandbox Code Playgroud)

.net c# singleton dependency-injection unity-container

6
推荐指数
1
解决办法
2万
查看次数

每个请求DbContext发生随机错误

我在mvc + ef + unity应用程序中遇到随机错误(每天几次),负载更高(每秒10+请求):

  • 连接未关闭/连接的当前状态正在连接
  • Count查询死锁(没有显式事务)
  • 已添加具有相同键的项目.在解析DbContext时在System.Data.Entity.DbContext.SetTEntity中
  • 远程主机关闭了连接.错误代码是0x80070057
  • 已经有一个与此命令关联的打开DataReader,必须先关闭它. - 我打开MARS摆脱这个(尽管我认为它应该在没有MARS的情况下正常工作,没有嵌套查询),这可能会导致另一个随机错误:
  • 服务器将断开连接,因为客户端驱动程序在会话处于单用户模式时发送了多个请求.

我使用PerRequestLifetimeManager的这个实现并尝试了Unity.Mvc3,没有任何区别.

有一些 提示 DbContext没有正确处理.我不确定每个请求是否是问题的原因,因为它似乎是常见的做法.

asp.net-mvc entity-framework unity-container dbcontext

5
推荐指数
1
解决办法
644
查看次数

asp.net mvc 4 - 好的是每个线程共享DbContext?

从每个Web请求一个DbContext ...为什么?

我的理解是不应该在并发Web请求之间共享DbContext实例,所以绝对不能跨线程.但是如何在非并发Web请求中共享它呢?

由于线程敏捷性(ASP.Net中线程敏捷性的含义是什么?),我是否正确,一个线程可以在它死之前处理多个Web请求?

如果是这样,依赖为每个线程注入DbContext实例是否安全?

原因是我使用Unity,它不包括每个请求的生命周期选项.从MVC,EF - DataContext单例实例Per-Web-Request在Unity中,我想我可以使用自定义LifetimeManager; 我只是想知道使用PerThreadLifetimeManager是否安全和充足.

asp.net-mvc entity-framework dependency-injection unity-container dbcontext

4
推荐指数
1
解决办法
2888
查看次数