Korzystanie z EF 4.1 i mini profilera 1.7. Korzystanie z modelu, najpierw skanowane z istniejącej bazy danych. EF generuje klasę wywodzącą się z ObjectContext/ObjectSet, a nie DbContext/DbSet. Nigdzie nie mogłem tego kontrolować.Nadal problemy z profilowaniem bazy danych EF Najpierw
Próbowałem popularnych rozwiązań, bezskutecznie.
Cierpiąc na frustrację, próbowałem bezpośrednio utworzyć mój kontekst za pomocą jawnego EntityConnection, który został utworzony bezpośrednio za pomocą ProfiledDbConnection. Chciałem ominąć jakąkolwiek szansę, że połączenie nie było zamierzone.
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();
}
}
Sprawdziłem, że została podjęta właściwa ścieżka. Jednak, gdy faktycznie działa kwerendy LINQ, otrzymamy wyjątek:
Nie można rzutować obiektu typu „MvcMiniProfiler.Data.ProfiledDbConnection” do rodzaju „System.Data.SqlClient.SqlConnection”.
Oświadczenie wykraczająca jest:
return query.ToList();
Ślad stosu jest jeszcze bardziej interesujące, ponieważ najwyraźniej coś wewnątrz EF absolutnie chce SqlConnection!
w System.Data.SqlClient.SqlCommand.set_DbConnection (wartość DbConnection) w System.Data.Common.DbCommand.set_Connection (wartość DbConnection) w System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState (EntityCommand entityCommand, EntityTransaction entityTransaction, DbCommand storeProviderCommand) w System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (entityCommand entityCommand zachowanie CommandBehavior) w System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType] (ObjectContext kontekście ObjectParameterCollection parameterValues) w System.Data.Objects.ObjectQuery
1.GetResults(Nullable
1 forMergeOption) w System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable.GetEnumerator() at System.Collections.Generic.List
1..ctor (IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 Źródło)
Oczywiście, jeśli paszy SqlConnection natomiast wszystko jest szczęśliwy.
Co się tutaj dzieje? Jak to się zawsze działo? Może to nigdy nie zadziałało w przypadku EDMX? Czy fakt, że pochodzi on z ObjectContext, ma jakiekolwiek znaczenie?
Mam ten sam problem. Nadal nie obejść problemu :( –
Czy używasz EF 4.1 "Update 1" przez przypadek? – kidoman
Według pakietów NuGet używam EF 4.1.10330.0 i MiniProfiler 1.7. Widzę, że są nowsze wersje obu pakietów, czy aktualizacja będzie właściwy? –