По-прежнему возникают проблемы с профилированием EF Database First

Использование EF 4.1 и Mini-profiler 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 (EntityCommand entityCommand, EntityTransaction entityTransaction, DbCommand storeProviderCommand) в System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, поведение CommandBehavior) в System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType] (ObjectContext context, ObjectParameterCollection parameterValues) в System.Data.Objects.ObjectQuery 1.GetResults (Nullable 1 forMergeOption) в System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable.GetEnumerator () в System.Collections.Generic.List 1..ctor (IEnumerable 1 коллекция) в System.Linq.Enumerable.ToList [TSource] (IEnumerable 1 источник)

Очевидно, если я скармливаю ему SqlConnection вместо этого, все будет хорошо.

Что здесь происходит? Как это вообще работало? Может, в случае с EDMX это никогда не сработало? Имеет ли значение тот факт, что он является производным от ObjectContext?

6
задан escape-llc 11 August 2011 в 16:46
поделиться