Procédure : Créer dynamiquement une base de données
Dans LINQ to SQL, un modèle objet est mappé à une base de données relationnelle. Le mappage est activé à l'aide du mappage basé sur les attributs ou d'un fichier de mappage externe pour décrire la structure de la base de données relationnelle. Dans les deux scénarios, il existe suffisamment d'informations sur la base de données relationnelle pour pouvoir créer une nouvelle instance de la base de données à l'aide de la méthode DataContext.CreateDatabase.
La méthode DataContext.CreateDatabase crée un réplica de la base de données uniquement en fonction de l'étendue des informations encodées dans le modèle objet. Les fichiers et les attributs de mappage de votre modèle objet ne peuvent pas encoder l'ensemble des éléments de la structure d'une base de données existante. Les informations de mappage ne représentent pas le contenu de fonctions définies par l'utilisateur, de procédures stockées, de déclencheurs ou de contraintes de validation. Ce comportement est suffisant pour différentes bases de données.
Vous pouvez utiliser la méthode DataContext.CreateDatabase dans le nombre de scénarios souhaité, surtout si un fournisseur de données connu tel que Microsoft SQL Server 2008 est disponible. Dans les scénarios classiques :
Vous générez une application qui s'installe automatiquement sur le système d'un client.
Vous générez une application cliente qui a besoin d'une base de données locale pour enregistrer son état hors connexion.
Vous pouvez également utiliser la méthode DataContext.CreateDatabase avec SQL Server en utilisant un fichier .mdf ou un nom de catalogue, en fonction de votre chaîne de connexion. LINQ to SQL utilise la chaîne de connexion pour définir la base de données à créer et sur quel serveur la base de données sera créée.
Notes
Si possible, utilisez la sécurité intégrée Windows pour vous connecter à la base de données de façon à ce que les mots de passe ne soient pas requis dans la chaîne de connexion.
Exemple 1
Le code suivant fournit un exemple de création d'une nouvelle base de données nommée 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
Exemple 2
Vous pouvez utiliser le modèle objet pour créer une base de données en procédant comme suit :
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
Exemple 3
Lors de la création d’une application qui s’installe automatiquement sur le système d’un client, vérifiez si la base de données existe déjà et supprimez-la avant d’en créer une. La classe DataContext fournit les méthodes DatabaseExists et DeleteDatabase pour vous aider dans cette tâche.
L'exemple suivant illustre une utilisation de ces méthodes pour implémenter cette approche :
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