Как создать таблицы в базе данных SQL с помощью Entity Framework во время выполнения и обновить модель во время выполнения? - PullRequest
1 голос
/ 21 января 2012

Я знаю, что когда я использую ado.net, я могу программно создать базу данных или таблицу во время выполнения, например:

String str;
SqlConnection myConn = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master");

str = "CREATE DATABASE MyDatabase ON PRIMARY " +
    "(NAME = MyDatabase_Data, " +
    "FILENAME = 'C:\\MyDatabaseData.mdf', " +
    "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
    "LOG ON (NAME = MyDatabase_Log, " +
    "FILENAME = 'C:\\MyDatabaseLog.ldf', " +
    "SIZE = 1MB, " +
    "MAXSIZE = 5MB, " +
    "FILEGROWTH = 10%)";

SqlCommand myCommand = new SqlCommand(str, myConn);
try 
{
    myConn.Open();
    myCommand.ExecuteNonQuery();
    MessageBox.Show("DataBase is Created Successfully", "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (System.Exception ex)
{
    MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
    if (myConn.State == ConnectionState.Open)
    {
        myConn.Close();
    }
}

Но я использую Entity Framework, и у меня есть работа, в которойсоздавать таблицы во время выполнения.Я много об этом искал, но так и не получил.Любая помощь будет оценена.

Ответы [ 3 ]

6 голосов
/ 21 января 2012

Платформа сущностей не предназначена для сценариев, в которых у вас нет статической схемы базы данных.

Причины:

  • Отображение структуры сущностей является статическим - требуется динамическое изменение, изменения XML-файлов, описывающие сопоставление во время выполнения, и использование вместо этого измененных файлов.
  • Даже с измененным отображением вы все еще не изменили или заново создали классы сущностей в своем коде. EF не поддерживает dynamic, поэтому единственный способ - либо динамически загружать сборку с новыми классами, созданными до создания таблиц, либо интенсивно использовать Reflection.Emit и позволить вашей программе «писать себя».

Если вам нужно только создать базу данных, но таблицы будут всегда одинаковыми, у вас все будет хорошо. Вы можете использовать этот код ADO.NET для создания базы данных и таблиц и передавать только измененную строку подключения в конструктор вашего контекста. Но требуется статическая схема базы данных = нет изменений в определении таблицы.

2 голосов
/ 21 января 2012

Entity Framework также имеет аналогичные функции, такие как myCommand.ExecuteNonQuery();, вы можете попробовать SomeEntities.ExecuteStoreCommand("some sql statements").

Учитывая, что Entity Framework требует сопоставления между моделями данных и базой данных, представляется невозможным создавать / изменять таблицы напрямую с помощью встроенного языка запросов (в противном случае модели данных необходимо изменить во время выполнения). Поэтому, без единой ссылки, поддерживающей эту точку зрения, я думаю, что SomeEntities.ExecuteStoreCommand() может быть единственным способом.

1 голос
/ 23 января 2012

Пожалуйста, прочитайте эту тему: NHibernate / Свободное отображение динамических столбцов NHibernate

лучше использовать хранилище значений ключей, такое как Redis, или базу данных без схемы, например CouchDBSQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...