Sdílet prostřednictvím


Práce s jazykem DDL (Data Description Language)

Počínaje rozhraním .NET Framework verze 4 podporuje Entity Framework jazyk DDL (Data Definition Language). To vám umožní vytvořit nebo odstranit instanci databáze na základě připojovací řetězec a metadat modelu úložiště (SSDL).

Následující metody použití ObjectContext připojovací řetězec a obsahu SSDL k provedení následujících kroků: vytvořte nebo odstraňte databázi, zkontrolujte, zda databáze existuje, a zobrazte vygenerovaný skript DDL:

Poznámka:

Spuštění příkazů DDL předpokládá dostatečná oprávnění.

Dříve uvedené metody delegovali většinu práce na podkladového poskytovatele dat ADO.NET. Je zodpovědností poskytovatele zajistit, aby zásady vytváření názvů používané ke generování databázových objektů byly konzistentní s konvencemi používanými k dotazování a aktualizacím.

Následující příklad ukazuje, jak vygenerovat databázi na základě existujícího modelu. Přidá také nový objekt entity do kontextu objektu a pak ho uloží do databáze.

Procedury

Definování databáze na základě existujícího modelu

  1. Vytvořte aplikační konzoli.

  2. Přidejte do aplikace existující model.

    1. Přidejte prázdný model s názvem SchoolModel. Pokud chcete vytvořit prázdný model, přečtěte si téma Postupy: Vytvoření nového souboru .edmx.

    Do projektu se přidá soubor SchoolModel.edmx.

    1. Zkopírujte koncepční obsah, úložiště a mapování školního modelu z tématu Školní model .

    2. Otevřete soubor SchoolModel.edmx a vložte obsah do edmx:Runtime značek.

  3. Do hlavní funkce přidejte následující kód. Kód inicializuje připojovací řetězec na databázový server, zobrazí skript DDL, vytvoří databázi, přidá do kontextu novou entitu a uloží změny do databáze.

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