Condividi tramite


Procedura: creare dinamicamente un database (LINQ to SQL)

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 utilizzare 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 utilizzare 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 utilizzare 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 utilizza la stringa di connessione per definire il database da creare e il server su cui dovrà essere creato il database.

NotaNota

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

Esempio

Nel codice seguente viene fornito un esempio della creazione di un nuovo database denominato MyDVDs.mdf.

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
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;
}

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

Public Sub CreateDatabase()
    Dim db As New MyDVDs("c:\...\mydvds.mdf")
    db.CreateDatabase()
End Sub
public void CreateDatabase()
{
    MyDVDs db = new MyDVDs("c:\\mydvds.mdf");
    db.CreateDatabase();
}

Quando si compila un'applicazione che viene installata automaticamente in un sistema del cliente, verificare se il database già esiste ed eliminarlo 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 utilizzare questi metodi per implementare tale approccio:

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
public void CreateDatabase2()
{
    MyDVDs db = new MyDVDs(@"c:\mydvds.mdf");
    if (db.DatabaseExists())
    {
        Console.WriteLine("Deleting old database...");
        db.DeleteDatabase();
    }
    db.CreateDatabase();
}

Vedere anche

Riferimenti

Mapping basato su attributo (LINQ to SQL)

Riferimento al mapping esterno (LINQ to SQL)

Mapping dei tipi CLR SQL (LINQ to SQL)

Altre risorse

Informazioni complementari (LINQ to SQL)

Scrittura e invio di modifiche di dati (LINQ to SQL)