Как использовать универсальный поставщик членства, EF и MiniProfiler вместе? - PullRequest
2 голосов
/ 03 февраля 2012

Если я использую универсальный поставщик членства и отдельную базу данных, Entity Framework и включаю Mini Profiler для EF 4.2.Я получаю сообщение об ошибке {"There is already an object named 'Applications' in the database."}, когда впервые попадаю в строку, проверяя учетные данные пользователя на своем домашнем экране.

Если я включаю удаление MiniProfilerEF.Initialize();, то я прекращаю получать ошибку.

Есть идеи?1007 *

Можно ли прекратить профилирование соединения по умолчанию?

1 Ответ

1 голос
/ 27 февраля 2012

Я уже давно бьюсь головой об этой проблеме. Сделал еще кое-что сегодня и смог заставить его работать. Вот что я сделал. В 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
  }
...