6

EF 4.1 및 미니 프로파일 러 사용 1.7. 모델 우선 사용, 기존 데이터베이스에서 스캔. EF는 DbContext/DbSet이 아니라 ObjectContext/ObjectSet에서 파생되는 클래스를 생성합니다. 나는 그것을 통제 할 수있는 곳을 찾을 수 없었다.EF 데이터베이스 프로파일 링에 여전히 문제가 있음

나는 인기있는 해결책을 시도했지만 아무 소용이 없습니다.

불만에서 벗어나기 위해 ProfiledDbConnection을 사용하여 직접 만든 명시 적 EntityConnection을 사용하여 컨텍스트를 직접 만들려고했습니다. 연결이 의도 한 유형이 아니었을 가능성을 우회하고 싶었습니다.

public HomeController() { 
try { 
    string[] paths = new string[] { @"res://*/" }; 
    Assembly[] assys = new Assembly[] { Assembly.GetExecutingAssembly() }; 
    MetadataWorkspace mw = new MetadataWorkspace(paths, assys); 
    string cnx = WebConfigurationManager.ConnectionStrings["XXXX"].ConnectionString; 
    DbConnection cx = MvcMiniProfiler.Data.ProfiledDbConnection.Get(new SqlConnection(cnx), MiniProfiler.Current); 
    //DbConnection cx = Database.DefaultConnectionFactory.CreateConnection(cnx); 
    EntityConnection ec = new EntityConnection(mw, cx); 
    db = new MyContextEntities(ec); 
} 
catch (Exception ex) { 
    Trace.WriteLine("EDM failed: " + ex.Message); 
    db = new MyContextEntities(); 
} 
} 

올바른 경로가 취해 졌음을 확인했습니다.

유형 'MvcMiniProfiler.Data.ProfiledDbConnection'의 개체를 캐스팅 할 수 없습니다 'System.Data.SqlClient.SqlConnection'을 입력 할 : 실제로 LINQ 쿼리를 실행하는 경우 그러나, 우리는 예외를 얻을.

기분을 상하게하는 문은 다음과 같습니다 EF 내부에 분명히 뭔가가 절대적도록 SqlConnection을 원하기 때문에

return query.ToList(); 

스택 추적이 훨씬 더 재미있다!

System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState에서 System.Data.Common.DbCommand.set_Connection (DbConnection 값)에 System.Data.SqlClient.SqlCommand.set_DbConnection (DbConnection 값)에

(하여 EntityCommand System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands에서 하여 EntityCommand, EntityTransaction entityTransaction, DbCommand storeProviderCommand) (하여 EntityCommand 하여 EntityCommand, CommandBehavior를 동작) System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType ( ObjectContext의 문맥에서 , ObjectParameterCollection parameterValues)System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable.GetEnumerator() at System.Collections.Generic.List 1..ctor에서 System.Data.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) 에서 515,(IEnumerable을 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 원) 분명히

, 내가 대신 그것을도록 SqlConnection을 공급하는 경우, 모든 는 행복하다.

여기에 무슨 일이 일어나고 있습니까? 어떻게 이런 일이 있었습니까? 어쩌면 EDMX의 경우에는 효과가 없었을까요? ObjectContext에서 파생된다는 사실에 어떤 영향이 있습니까?

+0

동일한 문제가 발생합니다. 아직 해결 방법이 없습니다 : ( –

+0

우연히 EF 4.1 'Update 1'을 사용하고 있습니까? – kidoman

+0

NuGet 패키지에 따르면, EF 4.1.10330.0 및 MiniProfiler 1.7을 사용하고 있습니다. 두 패키지의 최신 버전이 있으며 업데이트가있을 것입니다. 적당한? –

답변

1

EF (4.1.10715.0) 및 MiniProfiler (1.9.1) 패키지를 업그레이드하고 MiniProfiler.EF (1.9.1) 패키지를 추가 한 후 App_Start 모듈 (MiniProfiler.cs)로 이동 한 후 다음을 입력하십시오. ProfiledDbConnectionFactory 코드 :

MiniProfilerEF.Initialize(); 

모두 좋다!

관련 문제