2

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

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

Любые идеи?

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

ответ

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 
    }