我对带有 SqlServerCe.3.5 连接的实体框架有疑问。我有一个名为 Assets 的小项目,带有 .SDF 数据库和实体(模型名称为 Main)。现在,当我试图连接到实体时发生了一些奇怪的事情。第一次一切正常,但现在我必须添加这个:
if (edmConnection.State != ConnectionState.Open)
{
edmConnection.Open();
}
因为与实体的连接一直都已关闭。添加此行后,我可以访问数据库和实体,但我收到此消息:
指定的命名连接在配置中未找到,不打算与 EntityClient 提供程序一起使用,或者无效。
这是堆栈跟踪:
在 System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 在 System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) 在 System.Data.Objects 在 System.Data.EntityClient.EntityConnection..ctor(String connectionString)。 ObjectContext..ctor(String connectionString, String defaultContainerName) at BL.Model.DBEntities..ctor() in C:\Users\Orel\Documents\Visual Studio 2010\Projects\Assets\BL\Model\Main.Designer.cs: C:\Users\Orel\Documents\Visual Studio 2010\Projects\Assets\BL\Handlers\mModelHandler.cs:line 中 BL.Handlers.mModelHandler.GetOnlyInstance() 处 BL.Handlers.mModelHandler..ctor() 的第 34 行30
这是我的代码和 app.config:
private static mModelHandler _mInstance = null;
public static DBEntities m_context = null;
public static mModelHandler GetOnlyInstance()
{
if (_mInstance == null)
{
try
{
m_context = new DBEntities(GetConnectionString());
_mInstance = new mModelHandler();
}
catch (Exception)
{
throw;
}
}
return _mInstance;
}
public static EntityConnection GetConnectionString()
{
try
{
var filePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if (filePath == null) throw new ArgumentNullException("filePath");
if (filePath.EndsWith("\\Assets\\bin\\Debug"))
{
filePath = filePath.Replace("\\Assets\\bin\\Debug", "\\BL\\DB.sdf");
}
var sqlCeConnectionString = string.Format("Data Source={0}", filePath);
// Create an EDM connection
EntityConnectionStringBuilder entity = new EntityConnectionStringBuilder();
entity.Metadata = "res://*/Model.Main.csdl|res://*/Model.Main.ssdl|res://*/Model.Main.msl";
entity.Provider = "System.Data.SqlServerCe.3.5";
entity.ProviderConnectionString = sqlCeConnectionString;
var edmConnectionString = entity.ToString();
var edmConnection = new EntityConnection(edmConnectionString);
if (edmConnection.State != ConnectionState.Open)
{
edmConnection.Open();
}
return edmConnection;
}
catch (Exception e)
{
throw;
}
}
app.config:
<add name="DBEntities" connectionString="metadata=res://*/Model.Main.csdl|res://*/Model.Main.ssdl|res://*/Model.Main.msl;provider=System.Data.SqlServerCe.3.5;provider connection string='Data Source=|DataDirectory|\DB.sdf'" providerName="System.Data.EntityClient" />
我在fourm中读到问题可能是app.config和连接字符串不匹配,我也试过了,但它不起作用..
我刚刚添加了一张图片: 链接
帮助!
奥廖尔