2

SqlServerCe.3.5接続のエンティティフレームワークに問題があります。.SDFデータベースとエンティティ(モデル名はMain)を持つAssetsという小さなプロジェクトがあります。今、私がエンティティに接続しようとしているときに、何か奇妙なことが起こりました。初めてすべてが正常に動作しますが、今はこれを追加する必要がありました:

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

エンティティへの接続が常に閉じられていたためです。この行を追加した後、データベースとエンティティにアクセスできますが、次のメッセージが表示されます。

指定された名前付き接続が構成に見つからないか、EntityClientプロバイダーでの使用を目的としていないか、無効です。

これはスタックトレースです:

System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)at System.Data.EntityClient.EntityConnection..ctor(String connectionString)at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)atSystem.Data.Objects。 C:\ Users \ Orel \ Documents \ Visual Studio 2010 \ Projects \ Assets \ BL \ Model \ Main.Designer.csのBL.Model.DBEntities..ctor()にあるObjectContext..ctor(String connectionString、String defaultContainerName): 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" />

app.configと接続文字列が一致しないことが問題である可能性があることを4mで読みました。これも試してみましたが、機能しません。

私はちょうどこれの画像を追加しました: リンク

ヘルプ!

オリョール

4

1 に答える 1

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" />

お役に立てれば。

于 2012-05-28T01:11:15.837 に答える