2011-12-29 123 views
7

無法強制類型爲'MvcMiniProfiler.Data.EFProfiledDbConnection'的對象類型爲'System.Data.SqlClient。 SqlConnection的」。無法強制類型爲'MvcMiniProfiler.Data.EFProfiledDbConnection'的對象類型爲'System.Data.SqlClient.SqlConnection'

我想升級到MvcMiniProfiler 1.9.0,當我打電話給MiniProfilerEF.Initialize()時,我不斷收到。我已經刪除了system.data配置部分。我不知道我做錯了什麼。我已經按照網站上的步驟,但也許我錯過了什麼?

我使用EF代碼第4.1和我路過我的ConnectionString的名字變成一個構造函數來創建我的DataContext。

網絡激活

using Project.Web.App_Start; 
using WebActivator; 

[assembly: PreApplicationStartMethod(typeof(MiniProfiler), "Start")] 

namespace Project.Web.App_Start { 
    public class MiniProfiler { 
     public static void Start() 
     { 
      if (Eco.Environment.IsDevelopment) { 
       MiniProfilerEF.Initialize(); 
      } 
     } 
    } 
} 

StructureMap註冊地:

using Project.Domain.Repositories; 
using StructureMap.Configuration.DSL; 

namespace Project.Web.DependencyResolution.Registries { 
public class RepositoriesRegistry : Registry { 
    public RepositoriesRegistry() { 
     For<IProjectDataContext>().HybridHttpOrThreadLocalScoped().Use(() => new ProjectDataContext(Eco.Database.Name)); 
      } 
    } 
} 

DataContext的構造:

public ProjectDataContext(string nameOrConnectionString) 
     : base(nameOrConnectionString) { 
     Active = new Active(this); 
    } 

我已刪除system.data的dataProvider弗朗我的配置,因爲文件說,我只需要調用MiniProfilerEF.Initialize()。

**更新

以前在1.7 MvcMiniProfiler我不得不設置Database.DefaultConnectionFactory屬性,但我已刪除了。 Database.DefaultConnectionFactory總是作爲SqlConnectionFactory返回,不應該是ProfiledConnectionFactory或類似的東西?

+0

你能提供代碼+配置文件嗎?通常,您在與您的DBContext類相同的名稱的配置文件中定義連接字符串,並且您永遠不需要使用非默認構造函數。 – Tejs 2011-12-29 15:34:37

+0

Iirc在nuget上有一個EF樣本設置。但是:我可以問:你總是給它一個異形連接?或者你有時(可能取決於用戶)使用配置文件連接,有時使用裸SQL連接? – 2011-12-29 15:34:54

+0

@MarcGravell我在1.7版本中做了這個。我將從配置文件連接(Debug)切換到(Release)中的sql連接。它運行良好。 – 2011-12-29 16:28:52

回答

0

我看到這裏的問題是,ProjectDataContext封裝了一些數據上下文爲財產「活動」,這不能由MvcProfiler代理髮現。

更重要的是,EFProfiledDbConnection居然是孩子的DbConnection,但不是的SqlConnection的孩子。它是在抽象使用不同的DB提供程序,如MySQL,Postgres的,等請儘量審查代碼的所有變量方面取得了,他們應該是的DbConnection,但不是的SqlConnection(這是MSSQL的供應商)。

2

我看到同樣的錯誤。它讓我瘋了,但我終於明白了。我的問題有沒有關係web.config,組件,Initialize_42Initialize(false)黑客或任何東西。

這裏就是我想歪......

我已使遷移的自動應用程序是這樣的:

App_Start:

Database.SetInitializer(
    new MigrateDatabaseToLatestVersion<DataContext, Migrations.Configuration>() 
); 

遷移/ Configuration.cs:

internal sealed class Configuration 
    : DbMigrationsConfiguration<Path.To.DataContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 
} 

而這正在通過WebActivator這樣觸發:

[assembly: WebActivator.PreApplicationStartMethod(
    typeof(service_tracker_mvc.App_Start.DatabaseInitializer), "Start")] 

我意外地發現禁用此過程導致分析器工作。碰巧的問題是,這個初始化過程太快。它通常發生在Application_Start(如果你不使用這個奇特的WebActivator的東西),所以我把它改爲PostStart。現在,它的工作原理:

     ▼▼▼▼ 
[assembly: WebActivator.PostApplicationStartMethod(
    typeof(service_tracker_mvc.App_Start.DatabaseInitializer), "Start")] 
0

我有這個同樣的問題,我發現修復它移動到掠影方式:http://getglimpse.com/。在我看來,它比miniprofiler好了很多,簡單易用,完整等

1

看到https://stackoverflow.com/a/10814033/311289

這是通過初始化miniprofiler之前做DB操作引起的,把一個斷點在contstructor爲你的數據庫上下文,另一個在MiniProfilerEF.Initialize();行,並進行修改,直到初始化爲止。

2

我犯了添加MiniProfiler.EF而不是MiniProfiler.EF6的錯誤。刪除MiniProfiler.EF並將其替換爲EF6版本修復了我的問題。

+0

謝謝薩姆,這救了我。 – Bassie 2017-10-08 11:45:27

相關問題