Tuesday, August 24, 2010

EF and the MultipleActiveResultSets Property

Today I converted our EF models to use Configurator (custom configuration module) instead of app.config. The code looked something like this (keep in mind, this is StructureMap initialization):

config.For(Of Enterprise.eJournal.Model.IsADataContext)() _

.Use(Of Enterprise.eJournal.ContextContainer)() _

.Ctor(Of
String)("connectionString") _

.Is(String.Format("metadata=res://*/Enterprise.eJournal.Model.ContextContainer.csdl|res://*/Enterprise.eJournal.Model.ContextContainer.ssdl|res://*/Enterprise.eJournal.Model.ContextContainer.msl;provider=System.Data.SqlClient;provider connection string=""{0}"";", Configurator.Instance.BioWoRxConnectionString))


 

The BioWoRxConnectionString setting is a standard SQL Server connection string. Still, I was receiving this error:

"There is already an open DataReader associated with the Command which must be closed first."

Turns out, the MultipleActiveResultSets property has to be included in the connection string for EF to work properly, so I did this:

config.For(Of Enterprise.eJournal.Model.IsADataContext)() _

.Use(Of Enterprise.eJournal.ContextContainer)() _

.Ctor(Of
String)("connectionString") _

.Is(String.Format("metadata=res://*/Enterprise.eJournal.Model.ContextContainer.csdl|res://*/Enterprise.eJournal.Model.ContextContainer.ssdl|res://*/Enterprise.eJournal.Model.ContextContainer.msl;provider=System.Data.SqlClient;provider connection string=""{0};MultipleActiveResultSets=True"";", Configurator.Instance.BioWoRxConnectionString))


 

There you go, problem solved!

No comments:

Post a Comment