19

我将 Entity Framework 4 与我的 Asp.Net MVC3 应用程序一起使用。我的问题是我正在使用实体框架对我的数据库执行操作,这工作正常。出于其他目的,我还使用 Sql Connection 来存储和检索数据库中的数据。我正进入(状态

[Keyword not supported: 'metadata']

连接我的数据库时出错。

这是我的网络配置

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

我正在使用类库,所以这是我的应用程序配置。

   <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)的连接字符串不采用这种格式。您正在使用特定于实体框架的一个。ADO.NET 应该是这样的:

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

因此,总而言之,您需要两个单独的连接字符串,一个用于 EF,一个用于 ADO.NET

于 2012-10-18T02:16:17.347 回答
19

您的连接字符串特定于实体框架并包含元数据。您需要从中获取您的提供者连接字符串。您可以使用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 个单独的连接字符串除外)是构建一个从 Entity Framework 对象返回 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));

(我从Entity Framework 得到了这个,得到了一个 sql 连接

于 2013-02-25T16:00:13.760 回答
-1

这里有一个更好的解决方案,使用 Entity Framework Power 工具,将您的数据库反向工程到您的项目中,然后您可以在这两种情况下使用单个 EF 连接字符串(这是一个正常的连接字符串)。

于 2012-10-18T03:26:55.813 回答