Como: Criar dinamicamente um banco de dados
No LINQ to SQL, um modelo de objeto é mapeado para um banco de dados relacional. O mapeamento é habilitado usando o mapeamento baseado em atributos ou um arquivo de mapeamento externo para descrever a estrutura do banco de dados relacional. Em ambos os cenários, há informações suficientes sobre o banco de dados relacional para que você possa criar uma nova instância do banco de dados usando o DataContext.CreateDatabase método.
O DataContext.CreateDatabase método cria uma réplica do banco de dados somente na extensão das informações codificadas no modelo de objeto. O mapeamento de arquivos e atributos do seu modelo de objeto pode não codificar tudo sobre a estrutura de um banco de dados existente. As informações de mapeamento não representam o conteúdo de funções definidas pelo usuário, procedimentos armazenados, gatilhos ou restrições de verificação. Esse comportamento é suficiente para uma variedade de bancos de dados.
Você pode usar o método em qualquer número de cenários, especialmente se um provedor de dados conhecido como o DataContext.CreateDatabase Microsoft SQL Server 2008 estiver disponível. Os cenários típicos incluem o seguinte:
Você está criando um aplicativo que se instala automaticamente em um sistema do cliente.
Você está criando um aplicativo cliente que precisa de um banco de dados local para salvar seu estado offline.
Você também pode usar o método com o DataContext.CreateDatabase SQL Server usando um arquivo .mdf ou um nome de catálogo, dependendo da cadeia de conexão. O LINQ to SQL usa a cadeia de conexão para definir o banco de dados a ser criado e em qual servidor o banco de dados deve ser criado.
Nota
Sempre que possível, use a Segurança Integrada do Windows para se conectar ao banco de dados para que as senhas não sejam necessárias na cadeia de conexão.
Exemplo 1
O código a seguir fornece um exemplo de como criar um novo banco de dados chamado MyDVDs.mdf.
public class MyDVDs : DataContext
{
public Table<DVD> DVDs;
public MyDVDs(string connection) : base(connection) { }
}
[Table(Name = "DVDTable")]
public class DVD
{
[Column(IsPrimaryKey = true)]
public string Title;
[Column]
public string Rating;
}
Public Class MyDVDs
Inherits DataContext
Public DVDs As Table(Of DVD)
Public Sub New(ByVal connection As String)
MyBase.New(connection)
End Sub
End Class
<Table(Name:="DVDTable")> _
Public Class DVD
<Column(IsPrimaryKey:=True)> _
Public Title As String
<Column()> _
Public Rating As String
End Class
Exemplo 2
Você pode usar o modelo de objeto para criar um banco de dados fazendo o seguinte:
public void CreateDatabase()
{
MyDVDs db = new MyDVDs("c:\\mydvds.mdf");
db.CreateDatabase();
}
Public Sub CreateDatabase()
Dim db As New MyDVDs("c:\...\mydvds.mdf")
db.CreateDatabase()
End Sub
Exemplo 3
Ao criar um aplicativo que se instala automaticamente em um sistema do cliente, veja se o banco de dados já existe e solte-o antes de criar um novo. A DataContext classe fornece os DatabaseExists métodos e DeleteDatabase para ajudá-lo com esse processo.
O exemplo a seguir mostra uma maneira como esses métodos podem ser usados para implementar essa abordagem:
public void CreateDatabase2()
{
MyDVDs db = new MyDVDs(@"c:\mydvds.mdf");
if (db.DatabaseExists())
{
Console.WriteLine("Deleting old database...");
db.DeleteDatabase();
}
db.CreateDatabase();
}
Public Sub CreateDatabase2()
Dim db As MyDVDs = New MyDVDs("c:\...\mydvds.mdf")
If db.DatabaseExists() Then
Console.WriteLine("Deleting old database...")
db.DeleteDatabase()
End If
db.CreateDatabase()
End Sub