Использование EF 4.1 и мини-профайлера 1.7.Используя сначала модель, отсканированную из существующей базы данных.EF генерирует класс, который наследуется от ObjectContext / ObjectSet, а не от DbContext / DbSet.Я не мог найти где-нибудь, чтобы контролировать это.
Я пробовал популярные решения, но безрезультатно.
Страдая от разочарования, я также пытался напрямую создать свой контекст с явным EntityConnection, которыйбыл создан непосредственно с ProfiledDbConnection.Я хотел обойти любой шанс, что соединение не было целевого типа.
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();
}
}
Я проверил, что выбран правильный путь.Однако при фактическом выполнении запроса LINQ мы получаем исключение:
Невозможно привести объект типа 'MvcMiniProfiler.Data.ProfiledDbConnection' к типу 'System.Data.SqlClient.SqlConnection'.
Оскорбительное утверждение:
return query.ToList();
Трассировка стека еще более интересна, потому что, очевидно, что-то внутри EF абсолютно хочет SqlConnection!
в System.Data.SqlClient.SqlCommand.set_DbConnection (значение DbConnection) в System.Data.Common.DbCommand.set_Connection (значение DbConnection) в System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState (сущность.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, поведение CommandBehavior) в System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType] (выборка ObjectContext, параметр ObjectVatuesCol)a.Objects.ObjectQuery 1.GetResults(Nullable
1 forMergeOption) в System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable.GetEnumerator()
at System.Collections.Generic.List
1..ctor (IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)
Очевидно, что если я его кормлюВместо этого SqlConnection все устраивает.
Что здесь происходит?Как это работает?Может быть, это никогда не работало для случая EDMX?Имеет ли тот факт, что он является производным от ObjectContext, какое-либо отношение?