EntityFramework(データベース初め)とAppHarborに問題があります。EntityFramework、AppHarbor、および構成変数
AppHarborによってWeb.configに挿入された構成文字列を使用しようとしています(メタデータをWebサイトのSequelizer設定オプションに追加しました)。コードが提供されます。
現在、私は非常に悪い人で、文字列を自分のアプリケーション設定プロバイダに直接埋め込んでいます。ホスティングプロバイダがDBを切り替えるとうまくいかないので、適切な方法で値を使用したいと考えていますAppHarborはweb.config経由で提供します。
AppHarbor(パスワードやサーバーの詳細は、削除)が提供するあたり、これは文字列です:
The specified metadata path is not valid. A valid path must be either an existing directory, an existing file with extension '.csdl', '.ssdl', or '.msl', or a URI that identifies an embedded resource.
私はそれから:
metadata='res://*/MyDataEntities.csdl|res://*/MyDataEntities.ssdl|res://*/MyDataEntities.msl;';provider=System.Data.SqlClient;provider connection string='Server=servername.sequelizer.com;Database=databasename;User ID=username;Password=<snip>;'
次のエラーが発生している、「そのまま」使用している場合次のコードを使用して、EFの必要な余分なものを追加してください。
if (String.IsNullOrWhiteSpace(ProductionDatabaseConnectionString))
{
// Get it on first read and cache it
var configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
var connectionString = configuration.ConnectionStrings.ConnectionStrings["SQLAppHarbor001"].ConnectionString;
// Add the required extra metadata for EF4.x
if (!connectionString.Contains("MultipleActiveResultSets=True;"))
connectionString += "MultipleActiveResultSets=True;";
if (!connectionString.Contains("App=EntityFramework;"))
connectionString += "App=EntityFramework;";
configuration.ConnectionStrings.ConnectionStrings["SQLAppHarbor001"].ConnectionString = connectionString;
configuration.Save();
ProductionDatabaseConnectionString = connectionString;
}
return ProductionDatabaseConnectionString;
次のように接続文字列を生成します。
metadata='res://*/MyDataEntities.csdl|res://*/MyDataEntities.ssdl|res://*/MyDataEntities.msl;';provider=System.Data.SqlClient;provider connection string='Server=servername.sequelizer.com;Database=databasename;User ID=username;Password=<snip>;'MultipleActiveResultSets=True;App=EntityFramework;
をしかし、それはエラーを生成します。
Format of the initialization string does not conform to specification starting at index 165.
指数165は、「プロバイダの接続文字列」の開始であること。
現在問題なく動作します、私が埋め込まれて使用作業の接続文字列は、次のとおりです。
metadata='res://*/MyDataEntities.csdl|res://*/MyDataEntities.ssdl|res://*/MyDataEntities.msl;';provider=System.Data.SqlClient;provider connection string='Server=servername.sequelizer.com;Database=databasename;User ID=username;Password=<snip>;multipleactiveresultsets=True;App=EntityFramework'
唯一の本当の違いは、「multipleactiveresultsets =真;アプリケーション= EntityFramework」ということでエントリが「プロバイダ接続の内側にあります文字列 "の文字列ではなく外側です。
他の人は、付属の構成変数を使用してAppHarborでEntityFrameworkを使用しているようですが、どうしたらいいですか?
お返事ありがとうございます。あなたの提案する方法でやり遂げましたが、問題はあなたが修正したい部分が常にあなたが受け取る文字列の最後にあると仮定しているということです。 SQLサーバープロバイダが一度も接続文字列を変更していないことを保証しているので、値をunhardcodingしています:) – Moo