19

Asp.NetMVC3アプリケーションでEntityFramework4を使用しています。私の問題は、Entity Frameworkを使用してデータベースでアクションを実行していることです。これは、正常に機能しています。他の目的のために、SQL接続を使用してデータベースからデータを保存および取得しています。私は得ています

[Keyword not supported: 'metadata']

データベースへの接続中にエラーが発生しました。

これは私のWeb設定です

  <add name="VibrantEntities" connectionString="metadata=res://*/Vibrant.csdl|res://*/Vibrant.ssdl|res://*/Vibrant.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

私はクラスLibraryを使用しているので、これが私のAppConfigです。

   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

   <add name="VibrantEntities" connectionString="metadata=res://*/Vibrant.csdl|res://*/Vibrant.ssdl|res://*/Vibrant.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
4

4 に答える 4

21

ADO.NET(この場合SqlConnection)の接続文字列は、その形式を取りません。EntityFrameworkに固有のものを使用しています。ADO.NETは次のようになります。

"data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True"

したがって、要約すると、EF用とADO.NET用の2つの個別の接続文字列が必要です。

于 2012-10-18T02:16:17.347 に答える
19

接続文字列はEntityFrameworkに固有であり、メタデータが含まれています。そこからプロバイダー接続文字列を取得する必要があります。あなたはそれを使用してそれを行うことができますEntityConnectionStringBuilder

var efConnectionString = "Your Entity Framework connection string";
var builder = new EntityConnectionStringBuilder(efConnectionString);
var regularConnectionString = builder.ProviderConnectionString;
于 2015-06-11T02:27:27.790 に答える
6

別のオプション(同じものに対する2つの別々の接続文字列以外)は、EntityFrameworkオブジェクトからADO.NET接続文字列を返すメソッドを作成することです。

using System.Data.EntityClient;
using System.Data.SqlClient;
...
private string GetADOConnectionString()
{
    SalesSyncEntities ctx = new SalesSyncEntities(); //create your entity object here
    EntityConnection ec = (EntityConnection)ctx.Connection;
    SqlConnection sc = (SqlConnection)ec.StoreConnection; //get the SQLConnection that your entity object would use
    string adoConnStr = sc.ConnectionString;
    return adoConnStr;
}

(これは、edmxファイルがあるクラスライブラリのどこかに配置します)

(これはhttp://justgeeks.blogspot.com/2009/11/getting-sqlconnection-from.htmlから入手しました)

またはさらに良い...SQLConnectionのものが手動SQLクエリである場合は、ExecuteStoredCommandを介してSQLConnectionを完全にスキップします。

new AdventureEntities().ExecuteStoreCommand(
        @"    UPDATE Users
              SET lname = @lname 
              WHERE Id = @id",
        new SqlParameter("lname", lname), new SqlParameter("id", id));

(これは、SQL接続を取得するEntity Frameworkから取得しました)

于 2013-02-25T16:00:13.760 に答える
-1

ここにもっと良い解決策があります。EntityFrameworkPowerツールを使用して、データベースをプロジェクトにリバースエンジニアリングします。その後、両方のシナリオで単一のEF接続文字列(通常の接続文字列)を使用できます。

于 2012-10-18T03:26:55.813 に答える