Поделиться через


Работа с языком определения данных

Начиная с .NET Framework версии 4, Entity Framework поддерживает язык определения данных (DDL). Это позволяет создавать или удалять экземпляр базы данных на основе строки подключения и метаданных модели хранилища (SSDL).

В следующих методах используется строка подключения и содержимое SSDL для выполнения следующих действий ObjectContext : создание или удаление базы данных, проверка наличия базы данных и просмотр созданного скрипта DDL:

Замечание

При выполнении команд DDL предполагается достаточно разрешений.

Ранее перечисленные методы делегировали большую часть работы базовому поставщику данных ADO.NET. Ответственность поставщика заключается в том, чтобы соглашение об именовании, используемое для создания объектов базы данных, соответствовало соглашениям, используемым для запроса и обновлений.

В следующем примере показано, как создать базу данных на основе существующей модели. Он также добавляет новый объект сущности в контекст объекта, а затем сохраняет его в базе данных.

Процедуры

Определение базы данных на основе существующей модели

  1. Создайте приложение консоли.

  2. Добавьте существующую модель в приложение.

    1. Добавьте пустую модель с именем SchoolModel. Чтобы создать пустую модель, см. раздел "Практическое руководство. Создание нового файла edmx ".

    Файл SchoolModel.edmx добавляется в проект.

    1. Скопируйте концептуальное, связанное с хранением и сопоставлением содержимое для модели школы из раздела Модель школы.

    2. Откройте файл SchoolModel.edmx и вставьте содержимое edmx:Runtime в теги.

  3. Добавьте следующий код в основную функцию. Код инициализирует строку подключения к серверу базы данных, просматривает скрипт 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