Строка подключения для Entity Framework в функции Azure - PullRequest
0 голосов
/ 18 апреля 2019

Я создаю функцию Azure и добавил ссылку на проект, который использует Entity Framework. Я скопировал строку подключения из этого проекта и вставил в файл local.settings.json внутри объекта ConnectionStrings как допустимую строку подключения EF.

metadata=res://*/xxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl;
provider=System.Data.SqlClient;
provider connection string=&quote;
    data source=xxx;
    initial catalog=xxx;
    user id=xxx;
    password=xxx;
    MultipleActiveResultSets=True;
    App=EntityFramework
&quote;

Но мне дали это исключение:

Ключевое слово не поддерживается: metadata.


Если я использую допустимую строку подключения SQL (как показано ниже) ,

data source=xxx;
initial catalog=xxx;
user id=xxx;
password=xxx;
MultipleActiveResultSets=True;
App=EntityFramework

У меня есть это исключение:

Контекст используется в режиме Code First с кодом, который был сгенерирован из файла EDMX для разработки Database First или Model First. Это не будет работать правильно. Чтобы устранить эту проблему, не удаляйте строку кода, которая выдает это исключение. Если вы хотите использовать Database First или Model First, убедитесь, что строка подключения Entity Framework включена в app.config или web.config запускаемого проекта. Если вы создаете свой собственный DbConnection, убедитесь, что это EntityConnection, а не какой-то другой тип DbConnection, и что вы передаете его одному из базовых DbContext конструкторов, которые принимают DbConnection , Чтобы узнать больше о Code First, Database First и Model First, см. Документацию Entity Framework здесь: http://go.microsoft.com/fwlink/?LinkId=394715


Как я могу создать соединение с моей базой данных в функции Azure, используя Entity Framework? Я использую .NET Framework и для EF сначала использую базу данных.


Я инициирую контекст моей базы данных следующим образом:

using (XxxDB db = new XxxDB()) 
{ }

Между тем, я создал перегрузку для компрессора XxxDB

public XxxDB(string connectionString): base(new EntityConnection(connectionString), true)
{ }

И передайте строку соединения SQL при создании XxxDB и получите эту ошибку:

Ключевое слово не поддерживается: data source.

1 Ответ

1 голос
/ 18 апреля 2019

Хорошо, это вызвано тем, как генерируются первые строки соединения модели EF. Для построения строки соединения EF требуется простая строка соединения в конструкторе. Затем вы сначала добавляете раздел метаданных для модели.

Когда вы создаете новую строку подключения для передачи строителю строки контекста БД, измените это:

public XxxDB(string connectionString): base(new EntityConnection(connectionString), true)
{ }

до

public XxxDB(string connectionString): base(GetEntityConnection(connectionString), true)
{ }

private static string GetEntityConnection(string connectionString)
{
    var efConnection = new EntityConnectionStringBuilder();
    efConnection.ProviderConnectionString = connectionString;
    // res://*/xxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl
    var model = "xxx";
    // this is what's missing in your question
    efConnection.Metadata = string.Format("res://*/Model.{0}.csdl|res://*/Model.{0}.ssdl|res://*/Model.{0}.msl", model);
    return efConnection.ConnectionString;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...