Procedura: creare un database in modo dinamico

In LINQ to SQL viene eseguito il mapping di un modello a oggetti a un database relazionale. Per descrivere la struttura del database relazionale è possibile eseguire il mapping basato sull'attributo o usare un file di mapping esterno. Entrambi gli scenari dispongono di informazioni sul database relazionale sufficienti per creare una nuova istanza del database mediante il metodo DataContext.CreateDatabase.

Il metodo DataContext.CreateDatabase crea una replica del database includendo solo le informazioni codificate nel modello a oggetti. I file e gli attributi di mapping del modello a oggetti potrebbero non codificare tutte le informazioni sulla struttura di un database esistente. Le informazioni sul mapping non rappresentano il contenuto di funzioni definite dall'utente, stored procedure, trigger o vincoli CHECK. Questo comportamento è sufficiente per vari tipi di database.

È possibile usare il metodo DataContext.CreateDatabase in un numero illimitato di scenari, specialmente se è nota la disponibilità di un provider di dati come Microsoft SQL Server 2008. Gli scenari tipici includono i seguenti:

  • Si compila un'applicazione che viene installata automaticamente in un sistema del cliente.

  • Si compila un'applicazione client che richiede un database locale per salvare il proprio stato offline.

È inoltre possibile usare il metodo DataContext.CreateDatabase con SQL Server mediante un file con estensione mdf o con un nome di catalogo, a seconda della stringa di connessione. LINQ to SQL usa la stringa di connessione per definire il database da creare e il server su cui dovrà essere creato il database.

Nota

Se possibile, usare la sicurezza integrata di Windows per connettersi al database in modo che non vengano richieste le password nella stringa di connessione.

Esempio 1

Nel codice seguente viene fornito un esempio della creazione di un nuovo database denominato 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

Esempio 2

È possibile usare il modello a oggetti per creare un database eseguendo le operazioni seguenti:

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

Esempio 3

Quando si compila un'applicazione che viene installata automaticamente in un sistema del cliente, verificare se il database già esiste e rilasciarlo prima di crearne uno nuovo. La classe DataContext fornisce i metodi DatabaseExists e DeleteDatabase per semplificare tale processo.

Nell'esempio seguente viene illustrato un modo in cui è possibile usare questi metodi per implementare tale approccio:

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

Vedi anche