Sdílet prostřednictvím


Postupy: Dynamické vytvoření databáze

V LINQ to SQL je objektový model mapován na relační databázi. Mapování je povoleno pomocí mapování na základě atributů nebo externího souboru mapování popisující strukturu relační databáze. V obou scénářích existuje dostatek informací o relační databázi, kterou můžete vytvořit novou instanci databáze pomocí DataContext.CreateDatabase metody.

Metoda DataContext.CreateDatabase vytvoří repliku databáze pouze v rozsahu informací kódovaných v objektovém modelu. Mapování souborů a atributů z objektového modelu nemusí kódovat všechno o struktuře existující databáze. Informace o mapování nepředstavují obsah uživatelem definovaných funkcí, uložených procedur, aktivačních událostí nebo omezení kontroly. Toto chování stačí pro celou řadu databází.

Metodu DataContext.CreateDatabase můžete použít v libovolném počtu scénářů, zejména pokud je k dispozici známý poskytovatel dat, jako je Microsoft SQL Server 2008. Mezi obvyklé scénáře patří:

  • Vytváříte aplikaci, která se automaticky nainstaluje do zákaznického systému.

  • Vytváříte klientskou aplikaci, která potřebuje místní databázi k uložení stavu offline.

Metodu DataContext.CreateDatabase můžete použít také s SQL Serverem pomocí souboru .mdf nebo názvu katalogu v závislosti na připojovací řetězec. LINQ to SQL používá připojovací řetězec k definování databáze, která se má vytvořit a na kterém serveru se má databáze vytvořit.

Poznámka:

Kdykoli je to možné, připojte se k databázi pomocí integrovaného zabezpečení systému Windows, aby se hesla v připojovací řetězec nepožadují.

Příklad 1

Následující kód obsahuje příklad vytvoření nové databáze s názvem 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

Příklad 2

Objektový model můžete použít k vytvoření databáze následujícím způsobem:

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

Příklad 3

Při vytváření aplikace, která se automaticky nainstaluje do systému zákazníka, zjistěte, jestli už databáze existuje, a před vytvořením nové databáze ji odstraňte. Třída DataContext poskytuje a DatabaseExists DeleteDatabase metody, které vám pomůžou s tímto procesem.

Následující příklad ukazuje jeden ze způsobů, jak lze tyto metody použít k implementaci tohoto přístupu:

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

Viz také