Udostępnij za pośrednictwem


Praca z językiem definicji danych

Począwszy od programu .NET Framework w wersji 4, program Entity Framework obsługuje język definicji danych (DDL). Dzięki temu można utworzyć lub usunąć wystąpienie bazy danych na podstawie parametry połączenia i metadanych modelu magazynu (SSDL).

Następujące metody używania ObjectContext parametry połączenia i zawartości SSDL do wykonania następujących czynności: utwórz lub usuń bazę danych, sprawdź, czy baza danych istnieje, i wyświetl wygenerowany skrypt DDL:

Uwaga

Wykonanie poleceń DDL zakłada wystarczające uprawnienia.

Metody wymienione wcześniej delegować większość pracy do bazowego dostawcy danych ADO.NET. Dostawca jest odpowiedzialny za zapewnienie, że konwencja nazewnictwa używana do generowania obiektów bazy danych jest zgodna z konwencjami używanymi do wykonywania zapytań i aktualizacji.

W poniższym przykładzie pokazano, jak wygenerować bazę danych na podstawie istniejącego modelu. Dodaje również nowy obiekt jednostki do kontekstu obiektu, a następnie zapisuje go w bazie danych.

z konkretnym obiektem

Aby zdefiniować bazę danych na podstawie istniejącego modelu

  1. Utwórz aplikację konsoli.

  2. Dodaj istniejący model do aplikacji.

    1. Dodaj pusty model o nazwie SchoolModel. Aby utworzyć pusty model, zobacz temat Instrukcje: tworzenie nowego pliku edmx.

    Plik SchoolModel.edmx jest dodawany do projektu.

    1. Skopiuj zawartość koncepcyjną, magazynową i mapowania modelu szkolnego z tematu School Model (Model szkoły).

    2. Otwórz plik SchoolModel.edmx i wklej zawartość w tagach edmx:Runtime .

  3. Dodaj następujący kod do funkcji main. Kod inicjuje parametry połączenia na serwerze bazy danych, wyświetla skrypt DDL, tworzy bazę danych, dodaje nową jednostkę do kontekstu i zapisuje zmiany w bazie danych.

    // 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