如何一起使用Universal Membership Provider,EF和MiniProfiler?

时间:2012-02-03 14:26:29

标签: asp.net-mvc-3 entity-framework-4.1 mvc-mini-profiler

如果我使用通用成员资格提供程序和单独的数据库,实体框架并为EF 4.2启用Mini Profiler。当我第一次在我的主视图中检查用户凭据时,我收到错误{"There is already an object named 'Applications' in the database."}

如果我转动删除MiniProfilerEF.Initialize();,我就会停止收到错误。

有什么想法吗?

我可以停止分析defaultconnection吗?

1 个答案:

答案 0 :(得分:1)

我一直在讨论这个问题已经有一段时间了。今天进行了一些挖掘并且能够使其正常工作。这就是我做的。在MiniProfiler.cs中,我定义了两种方法:

public static DbConnection GetConnection()
{
    var connectionString = ConfigurationManager.ConnectionStrings["MyModelConnectionString"].ConnectionString;
    var entityConnStr = new EntityConnectionStringBuilder(connectionString);
    var realConnection = new SqlConnection(entityConnStr.ProviderConnectionString);
    return realConnection;            
}

public static IMyModelsInterface GetProfiledContext()
{           
     var connection = new MvcMiniProfiler.Data.EFProfiledDbConnection(GetConnection(), MiniProfiler.Current);
     var context = connection.CreateObjectContext<MyModel>();
     return context; 
}

注意:这两种方法可能不应该在MinProfilerPackage中定义,但这是我的第一次过去/黑客攻击它。

然后调用GetProfiledContext()并使用您想要查询的查询时返回的上下文。我使用Ninject将此配置文件上下文注入我的控制器工厂。我的电话看起来像这样:

public NinjectControllerFactory()
{
    ninjectKernel = new StandardKernel();
    AddBindings();
}
private void AddBindings()
{
    var context = MiniProfilerPackage.GetProfiledContext();
    IUnitOfWork uow = new UnitOfWork(context);
    ninjectKernel.Bind<IRepository>().To<GenericRepository>().WithConstructorArgument("paramUnitOfWork", uow);  

     // ... rest of the method
 }

NinjectControllerFactory是我的控制器工厂,它在Application_Start中设置。

 protected void Application_Start()
 {
     // Add in DI for controller and repo associations
     ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

     // ... rest of the method
  }