4

これは EF の初心者が直面する一般的な問題であり、ここでは同じ質問と回答が複数ありますが、まだ問題を解決できていません。

私は EF 4.1 と MVC 3 を使用しており、別のライブラリで DB から EF モデルを生成しました。サポート ライブラリの app.config からアプリケーションの web.config に接続文字列をコピーしました。また、web.config 接続文字列を渡すことで、オブジェクト コンテキストをインスタンス化しています。

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MasterDataContainer"].ConnectionString;

context = new MasterDataContainer(connectionString);

web.config の接続文字列は次のとおりです。

<connectionStrings>    
    <add name="MasterDataContainer" connectionString="metadata=res://*/MasterData.csdl|res://*/MasterData.ssdl|res://*/MasterData.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=MasterData;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

「サポートされていないキーワード: データ ソース」というエラーが表示されます。これに関するヘルプをいただければ幸いです。

4

2 に答える 2

3

EntityConnectionStringBuilder既に EF 接続文字列があるため、必要はありません。つまりただ

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MasterDataContainer"].ConnectionString;
context = new MasterDataContainer(connectionString);

EntityConnectionStringBuilderたとえば、vanilla .NET から EF 接続を構築するために使用できます。

編集ここで この問題に遭遇したようです。回避策は、接続文字列のロードをエスケープしてから&quot;"'"

全体的に簡単なのはname=ConnStringName、ObjectContext / DbContext のオーバーロードを使用することです。あなたの場合、これは

context = new MasterDataContainer("name=MasterDataContainer");

また、生成されたコンテキスト (おそらくMasterDataContainer.Context.cs) のソースを表示する場合、デフォルトのコンストラクターには EntityContainerName プロパティがハードコードされている必要があるため、同じ EntityContainerName を保持していれば、コンストラクターに接続文字列をまったく提供する必要がないことに注意してください。

http://msdn.microsoft.com/en-us/library/bb739017.aspx

于 2012-08-24T06:18:32.847 に答える
0

この問題を解決する最も簡単な方法は、EF conn 文字列を書き直すことです ( amp;quot;を置き換えます)。

オリジナルから

<add name="Entities" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=<SERVER\INSTANCE>;initial catalog=<BDD>;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&amp;quot;&quot;" providerName="System.Data.EntityClient" />

FIXEDへ

<add name="Entities" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string='metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient';provider connection string='data source=<SERVER\INSTANCE>;initial catalog=<BDD>;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework;'" providerName="System.Data.EntityClient" />

次に、エンティティ名とタグSERVER\INSTANCEおよびBDDを値に変更するだけです。

これにより、数日間の調査が節約されることを願っています。楽しみ!

于 2014-12-10T05:00:54.390 に答える