Arbeta med datadefinitionsspråk

Från och med .NET Framework version 4 stöder Entity Framework datadefinitionsspråk (DDL). På så sätt kan du skapa eller ta bort en databasinstans baserat på anslutningssträngen och metadata för lagringsmodellen (SSDL).

Följande metoder använder ObjectContext anslutningssträngen och SSDL-innehållet för att utföra följande: skapa eller ta bort databasen, kontrollera om databasen finns och visa det genererade DDL-skriptet:

Anmärkning

Körningen av DDL-kommandona förutsätter tillräckliga behörigheter.

Metoderna som tidigare listade delegerar det mesta av arbetet till den underliggande ADO.NET dataprovidern. Det är leverantörens ansvar att se till att namngivningskonventionen som används för att generera databasobjekt överensstämmer med konventioner som används för frågor och uppdateringar.

I följande exempel visas hur du genererar databasen baserat på den befintliga modellen. Det lägger också till ett nytt entitetsobjekt i objektkontexten och sparar det sedan i databasen.

Förfaranden

Så här definierar du en databas baserat på den befintliga modellen

  1. Skapa en konsolapplikation.

  2. Lägg till en befintlig modell i ditt program.

    1. Lägg till en tom modell med namnet SchoolModel. Information om hur du skapar en tom modell finns i avsnittet Så här skapar du en ny .edmx-fil .

    Filen SchoolModel.edmx läggs till i projektet.

    1. Kopiera koncept- och lagrings- och mappningsinnehållet för skolmodellen från ämnet Skolmodell .

    2. Öppna filen SchoolModel.edmx och klistra in innehållet i taggarna edmx:Runtime .

  3. Lägg till följande kod i huvudfunktionen. Koden initierar anslutningssträngen till databasservern, visar DDL-skriptet, skapar databasen, lägger till en ny entitet i kontexten och sparar ändringarna i databasen.

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