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