Trabalhando com a linguagem de definição de dados
A partir do .NET Framework versão 4, o Entity Framework dá suporte à DDL (linguagem de definição de dados). Isso permite que você crie ou exclua uma instância do banco de dados com base na cadeia de conexão e nos metadados do modelo de armazenamento (SSDL).
Os métodos a seguir no ObjectContext usam a cadeia de conexão e o conteúdo SSDL para criar ou excluir o banco de dados, verificar se o banco de dados existe e exibir o script DDL gerado:
Observação
A execução de comandos DDL pressupõe permissões suficientes.
Os métodos listados anteriormente delegam a maioria do trabalho para o provedor de dados ADO.NET subjacente. É responsabilidade do provedor garantir que a convenção de nomenclatura usada para gerar objetos de banco de dados seja consistente com as convenções usadas nas consultas e atualizações.
O exemplo a seguir mostra como gerar o banco de dados com base no modelo existente. Ele também adiciona um novo objeto de entidade ao contexto de objeto e os salva no banco de dados.
Procedimentos
Para definir um banco de dados com base no modelo existente
Crie um aplicativo de console.
Adicione um modelo existente ao seu aplicativo.
- Adicione um modelo vazio chamado
SchoolModel
. Para criar um modelo vazio, consulte o tópico Como criar um novo arquivo .edmx .
O arquivo SchoolModel.edmx é adicionado ao projeto.
Copie o conteúdo conceitual, do armazenamento e do mapeamento para o modelo School do tópico School Model.
Abra o arquivo SchoolModel.edmx e cole o conteúdo nas marcas
edmx:Runtime
.
- Adicione um modelo vazio chamado
Adicione o seguinte código à função principal. O código inicializa a cadeia de conexão ao servidor de banco de dados, exibe o script DDL, cria o banco de dados, adiciona uma nova entidade ao contexto e salva as alterações no banco de dados.
// 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