Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с .NET Framework версии 4, Entity Framework поддерживает язык определения данных (DDL). Это позволяет создавать или удалять экземпляр базы данных на основе строки подключения и метаданных модели хранилища (SSDL).
В следующих методах используется строка подключения и содержимое SSDL для выполнения следующих действий ObjectContext : создание или удаление базы данных, проверка наличия базы данных и просмотр созданного скрипта DDL:
Замечание
При выполнении команд DDL предполагается достаточно разрешений.
Ранее перечисленные методы делегировали большую часть работы базовому поставщику данных ADO.NET. Ответственность поставщика заключается в том, чтобы соглашение об именовании, используемое для создания объектов базы данных, соответствовало соглашениям, используемым для запроса и обновлений.
В следующем примере показано, как создать базу данных на основе существующей модели. Он также добавляет новый объект сущности в контекст объекта, а затем сохраняет его в базе данных.
Процедуры
Определение базы данных на основе существующей модели
Создайте приложение консоли.
Добавьте существующую модель в приложение.
- Добавьте пустую модель с именем
SchoolModel
. Чтобы создать пустую модель, см. раздел "Практическое руководство. Создание нового файла edmx ".
Файл SchoolModel.edmx добавляется в проект.
Скопируйте концептуальное, связанное с хранением и сопоставлением содержимое для модели школы из раздела Модель школы.
Откройте файл SchoolModel.edmx и вставьте содержимое
edmx:Runtime
в теги.
- Добавьте пустую модель с именем
Добавьте следующий код в основную функцию. Код инициализирует строку подключения к серверу базы данных, просматривает скрипт DDL, создает базу данных, добавляет новую сущность в контекст и сохраняет изменения в базе данных.
// Initialize the connection string. String connectionString = "..."; using (SchoolEntities context = new SchoolEntities(connectionString)) { try { if (context.DatabaseExists()) { // Make sure the database instance is closed. context.DeleteDatabase(); } // View the database creation script. Console.WriteLine(context.CreateDatabaseScript()); // Create the new database instance based on the storage (SSDL) section // of the .edmx file. context.CreateDatabase(); // The following code adds a new objects to the context // and saves the changes to the database. Department dpt = new Department { Name = "Engineering", Budget = 350000.00M, StartDate = DateTime.Now }; context.Departments.AddObject(dpt); // An entity has a temporary key // until it is saved to the database. Console.WriteLine(dpt.EntityKey.IsTemporary); context.SaveChanges(); // The object was saved and the key // is not temporary any more. Console.WriteLine(dpt.EntityKey.IsTemporary); } catch (InvalidOperationException ex) { Console.WriteLine(ex.InnerException.Message); } catch (NotSupportedException ex) { Console.WriteLine(ex.InnerException.Message); } }
' Initialize the connection string. Dim connectionString As String = "metadata=res://*/School.csdl|res://*/School.ssdl|res://*/School.msl;provider=System.Data.SqlClient;" & "provider connection string=""Data Source=.;Initial Catalog=School;Integrated Security=True;MultipleActiveResultSets=True""" Using context As New SchoolEntities(connectionString) Try If context.DatabaseExists() Then ' Make sure the database instance is closed. context.DeleteDatabase() End If ' View the database creation script. Console.WriteLine(context.CreateDatabaseScript()) ' Create the new database instance based on the storage (SSDL) section ' of the .edmx file. context.CreateDatabase() ' The following code adds a new objects to the context ' and saves the changes to the database. Dim dpt As New Department() context.Departments.AddObject(dpt) ' An entity has a temporary key ' until it is saved to the database. Console.WriteLine(dpt.EntityKey.IsTemporary) context.SaveChanges() ' The object was saved and the key ' is not temporary any more. Console.WriteLine(dpt.EntityKey.IsTemporary) Catch ex As InvalidOperationException Console.WriteLine(ex.InnerException.Message) Catch ex As NotSupportedException Console.WriteLine(ex.InnerException.Message) End Try End Using