Werken met gegevensdefinitietaal

Vanaf .NET Framework versie 4 ondersteunt Entity Framework de DDL (Data Definition Language). Hiermee kunt u een database-instantie maken of verwijderen op basis van de verbindingsreeks en de metadata van het opslagmodel (SSDL).

De volgende methoden op het ObjectContext maken gebruik van de verbindingsreeks en de SSDL-inhoud om het volgende te bereiken: het maken of verwijderen van de database, controleren of de database bestaat en het gegenereerde DDL-script bekijken.

Opmerking

Bij het uitvoeren van de DDL-opdrachten wordt ervan uitgegaan dat er voldoende machtigingen zijn.

De eerder vermelde methoden delegeren het grootste deel van het werk aan de onderliggende ADO.NET gegevensprovider. Het is de verantwoordelijkheid van de provider om ervoor te zorgen dat de naamconventie die wordt gebruikt om databaseobjecten te genereren, consistent is met conventies die worden gebruikt voor het uitvoeren van query's en updates.

In het volgende voorbeeld ziet u hoe u de database genereert op basis van het bestaande model. Er wordt ook een nieuw entiteitsobject aan de objectcontext toegevoegd en vervolgens opgeslagen in de database.

Werkwijzen

Een database definiƫren op basis van het bestaande model

  1. Maak een consoletoepassing aan.

  2. Voeg een bestaand model toe aan uw toepassing.

    1. Voeg een leeg model toe met de naam SchoolModel. Als u een leeg model wilt maken, raadpleegt u het onderwerp Procedure: Een nieuw edmx-bestand maken.

    Het schoolmodel.edmx-bestand wordt toegevoegd aan uw project.

    1. Kopieer de conceptuele inhoud, opslaginhoud en mappingsinhoud van het schoolmodel uit het onderwerp Schoolmodel.

    2. Open het bestand SchoolModel.edmx en plak de inhoud in de edmx:Runtime tags.

  3. Voeg de volgende code toe aan uw hoofdfunctie. De code initialiseert de verbindingsreeks met uw databaseserver, bekijkt het DDL-script, maakt de database, voegt een nieuwe entiteit toe aan de context en slaat de wijzigingen in de database op.

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