Работа с языком описания данных DDLWorking with Data Definition Language

Начиная с платформа .NET Framework версии 4 Entity Framework поддерживает язык описания данных (DDL).Starting with the .NET Framework version 4, the Entity Framework supports data definition language (DDL). Это позволяет создавать и удалять экземпляры базы данных с использованием строки подключения и метаданных модели хранения (SSDL).This allows you to create or delete a database instance based on the connection string and the metadata of the storage (SSDL) model.

В следующих методах в ObjectContext с помощью строки соединения и содержимого SSDL выполняются следующие задачи: создание базы данных, удаление базы данных, проверка наличия базы данных и просмотр сформированного скрипта DDL.The following methods on the ObjectContext use the connection string and the SSDL content to accomplish the following: create or delete the database, check whether the database exists, and view the generated DDL script:

Примечание

Предполагается наличие достаточных разрешений для выполнения команд DDL.Executing the DDL commands assumes sufficient permissions.

Ранее указанные методы делегируют большую часть работы базовому поставщику данных ADO.NET.The methods previously listed delegate most of the work to the underlying ADO.NET data provider. Поставщик отвечает за соблюдение соглашения об именах, применяемых при создании объектов базы данных, в соответствии с правилами, используемыми для запросов и обновлений.It is the provider’s responsibility to ensure that the naming convention used to generate database objects is consistent with conventions used for querying and updates.

В следующем примере показано, как создать базу данных по существующей модели.The following example shows you how to generate the database based on the existing model. Кроме того, новый объект сущности добавляется в контекст объекта, а затем сохраняется в базе данных.It also adds a new entity object to the object context and then saves it to the database.

ПроцедурыProcedures

Определение базы данных по существующей моделиTo define a database based on the existing model

  1. Создайте консольное приложение.Create a console application.

  2. Добавьте существующую модель в приложение.Add an existing model to your application.

    1. Добавьте пустую модель с именем SchoolModel .Add an empty model named SchoolModel. Чтобы создать пустую модель, см. раздел как создать файл EDMX .To create an empty model, see the How to: Create a New .edmx File topic.

    В проект будет добавлен файл SchoolModel.edmx.The SchoolModel.edmx file is added to your project.

    1. Скопируйте концептуальное, хранилище и сопоставленное содержимое для модели School из статьи School Model (учебная модель ).Copy the conceptual, storage, and mapping content for the School model from the School Model topic.

    2. Откройте файл SchoolModel.edmx и вставьте нужное содержимое в тегах edmx:Runtime.Open the SchoolModel.edmx file and paste the content within the edmx:Runtime tags.

  3. Добавьте следующий код в функцию main.Add the following code to your main function. Этот код инициализирует строку подключения с сервером базы данных, просматривает скрипт DDL, создает базу данных, добавляет новую сущность в контекст и сохраняет изменения в базе данных.The code initializes the connection string to your database server, views the DDL script, creates the database, adds a new entity to the context, and saves the changes to the database.

    // Initialize the connection string.
    String connectionString = "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 (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