3

これは本当に簡単だと思いますが、何らかの理由で答えを見つけることができません。私の問題は、以前に ObjectContext から継承する EF 4.3.1 コンテキストを使用したことがあり、自動生成により、接続文字列をパラメーターとして受け入れるオーバーロードされたコンストラクターが常に作成されたことです。

EF 5.0 に切り替えようとしている今、DbContext バージョンを使用する必要があります。しかし、DbContext から継承された MyEntities には、パラメーターなしのコンストラクターしかありません。オーバーロードされたコンストラクターを自分で追加して base(connectionString) を呼び出すこともできると思いますが、自動生成されたファイルを手動で変更することは、せいぜい危険なビジネスのように思えます。

では、実行時に提供する接続文字列を使用する MyEntities のインスタンスを作成するにはどうすればよいでしょうか?

4

3 に答える 3

1

connectionFactory を使用してみましたか?

この例は SqLite 用ですが、すべてのデータベースに適用されます。

次のようなクラスを作成できます。

public class SqLiteConnectionFactory : IDbConnectionFactory
{
     public System.Data.Common.DbConnection CreateConnection(string nameOrConnectionString)
     {
       var databaseDirectory = @"C:\\master.db";

        var builder = new SQLiteConnectionStringBuilder
        {
            DataSource = databaseDirectory,
            Version = 3
        };
        return new SQLiteConnection(builder.ToString());
       }
}

そして、最初にコンテキストにアクセスする前に、このステートメントを実行して if を使用します。

Database.DefaultConnectionFactory = new ConnectionFactories.SqLiteConnectionFactory ();
于 2012-09-02T12:35:51.797 に答える
0

接続文字列を作成する関数は次のとおりです(firebirdの場合はこちら):

private static string ConnectionString(string dbFileName)
    {
        // Specify the provider name, server and database.
        const string providerName = "FirebirdSql.Data.FirebirdClient";
        const string metaData = "res://*/RcModel.csdl|res://*/RcModel.ssdl|res://*/RcModel.msl";

        // Initialize the EntityConnectionStringBuilder.
        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

        //Set the provider name.
        entityBuilder.Provider = providerName;

        FbConnectionStringBuilder sqlBuilder = new FbConnectionStringBuilder();

        sqlBuilder.UserID = "sysdba";
        sqlBuilder.Password = "masterkey";
        sqlBuilder.DataSource = @"127.0.0.1";
        sqlBuilder.Database = dbFileName;
        sqlBuilder.Dialect = 3;
        sqlBuilder.Charset = "UTF8";
        sqlBuilder.ServerType = FbServerType.Default;

        // Set the provider-specific connection string.
        entityBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
        entityBuilder.Metadata = metaData;
        return entityBuilder.ToString();
    }

そのように使用してください:

        string cs = ConnectionString(@"C:\myDbFile.fbd");
        EntityConnection conn = new EntityConnection(cs);
        MyEntities db = new MyEntities(conn);
于 2012-11-20T14:09:58.733 に答える
-1

MyEntitiesを作成する場所でそれを行うことができます。このようなもの:

MyEntities dataContext = new MyEntities();

dataContext.Database.Connection.ConnectionString = "<YOUR CONNECTION STRING>";

edmxが構成内の接続文字列を検索するように設定されている場合でも、作成時に検索しますが、その中に埋め込まれているデータベースプロバイダーの接続文字列を取り除くことができます。それを実行すると、次のようになります(SQLに接続している場合)。

 <connectionStrings>
      <add name="MyEntities" connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;provider=System.Data.SqlClient;provider connection string=;" providerName="System.Data.EntityClient" />
</connectionStrings>
于 2013-03-01T20:56:47.117 に答える