Подтвердить что ты не робот

Ключевое слово не поддерживается: "метаданные".? с подключением Sql в платформе Entityt с MVC3

Я использую Entity Framework 4 с моим приложением ASP.NET MVC3. Моя проблема в том, что я использую Entity Framework для выполнения действий с моей базой данных. Это работает нормально. Для некоторых других целей я также использую 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" />
4b9b3361

Ответ 1

Строка подключения для ADO.NET(в данном случае SqlConnection) не принимает этот формат. Вы используете один для Entity Framework. ADO.NET должно быть что-то вроде:

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

Итак, чтобы подвести итог, вам нужны две отдельные строки подключения: одна для EF и одна для ADO.NET

Ответ 2

Строка подключения специфична для Entity Framework и содержит метаданные. Вам нужно получить строку подключения к вашему провайдеру. Вы можете сделать это, используя EntityConnectionStringBuilder:

var efConnectionString = "Your Entity Framework connection string";
var builder = new EntityConnectionStringBuilder(efConnectionString);
var regularConnectionString = builder.ProviderConnectionString;

Ответ 3

Другой вариант (кроме двух отдельных строк подключения для одного и того же) заключается в создании метода, который возвращает строку соединения ADO.NET из объекта Entity Framework:

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-запросами, полностью пропустите SQLConnection через ExecuteStoredCommand:

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

(Я получил это от Entity Framework, получающего соединение sql)

Ответ 4

Theres лучшее решение здесь, используйте инструменты Entity Framework Power, перепроектируйте свою базу данных в свой проект, затем вы можете использовать одну строку соединения EF (которая является обычной строкой соединения) для обоих сценариев.