Como: criar um banco de dados dinamicamente
No LINQ to SQL, um modelo de objeto é mapeado para um banco de dados relacional. O mapeamento é habilitado usando o mapeamento baseado em atributo 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 método DataContext.CreateDatabase.
O método DataContext.CreateDatabase cria uma réplica do banco de dados somente para a extensão das informações codificadas no modelo de objeto. Os arquivos de mapeamento e os atributos no modelo de objeto podem não codificar tudo sobre a estrutura de um banco de dados existente. As informações de mapeamento não representam o conteúdo das funções definidas pelo usuário, dos procedimentos armazenados, dos gatilhos ou das restrições de verificação. Esse comportamento é suficiente para vários bancos de dados.
Você pode usar o método DataContext.CreateDatabase em diversos cenários, especialmente se um provedor de dados conhecido como o Microsoft SQL Server 2008 estiver disponível. Os cenários comuns são os seguintes:
Você está criando um aplicativo que se instala automaticamente em um sistema de 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 DataContext.CreateDatabase com o 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.
Observação
Sempre que possível, use a Segurança Integrada do Windows para se conectar ao banco de dados, de modo que não sejam necessárias senhas 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 compilar um aplicativo que se instala automaticamente em um sistema do cliente, verifique se o banco de dados já existe e descarte-o antes de criar um novo. A classe DataContext fornece os métodos DatabaseExists e DeleteDatabase para ajudar nesse processo.
O exemplo a seguir mostra uma maneira de implementar essa abordagem através desses métodos:
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