c# - 带有SqlServerCe.3.5的实体框架 - 连接异常

时间:2012-05-28 00:06:26

标签: c# wpf entity-framework

我的实体框架与SqlServerCe.3.5连接有问题。 我有一个名为Assets的小项目,带有.SDF数据库和实体(模型名称为Main)。 现在,当我试图连接到实体时发生了一些奇怪的事情。 在第一次一切正常,但现在我必须添加这个:

 if (edmConnection.State != ConnectionState.Open)
  {
    edmConnection.Open();
  }

因为所有时间与实体的连接都已关闭。 在我添加这些行后,我可以访问数据库和实体,但我收到了这条消息:

  

在配置中找不到指定的命名连接,不打算与EntityClient提供程序一起使用,或者无效。

这是堆栈跟踪:

  

at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)      在System.Data.EntityClient.EntityConnection..ctor(String connectionString)      at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)      at System.Data.Objects.ObjectContext..ctor(String connectionString,String defaultContainerName)      在C:\ Users \ Orel \ Documents \ Visual Studio 2010 \ Projects \ Assets \ BL \ Model \ Main.Designer.cs中的BL.Model.DBEntities..ctor():第34行      在BL.Handlers.mModelHandler..ctor()      在C:\ Users \ Orel \ Documents \ Visual Studio 2010 \ Projects \ Assets \ BL \ Handlers \ mModelHandler.cs中的BL.Handlers.mModelHandler.GetOnlyInstance():第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" />

我在4m中读到问题可能是app.config和连接字符串不匹配,我也尝试了这个并且它没有工作..

我刚刚添加了一张图片: Link

帮助!

奥勒尔

1 个答案:

答案 0 :(得分:0)

我认为你的连接字符串没有被正确解析。尝试使用&quot;代替'

我也相信,对于SqlCE,引号中的provider应该是provider=System.Data.SqlServerCe,3.5;而不是provider=System.Data.SqlServerCe.3.5;

请注意版本,之前的3.5

总而言之,我们有:

<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= &quot;Data Source=|DataDirectory|\DB.sdf&quot;"
     providerName="System.Data.EntityClient" />

希望这有帮助。