Практическое руководство. Динамическое создание базы данных
В LINQ to SQL модель объектов сопоставляется с реляционной базой данных. Сопоставление обеспечивается применением для описания структуры реляционной базы данных сопоставления на основе атрибутов или внешнего файла сопоставления. В обоих случаях имеется достаточно сведений о реляционной базе данных, позволяющих создать новый экземпляр базы данных с помощью метода DataContext.CreateDatabase.
Метод DataContext.CreateDatabase создает реплику базы данных с той степенью подробности, которую позволяет обеспечить информация, закодированная в модели объектов. Файлы сопоставления и атрибуты из модели объектов могут включать не все сведения относительно структуры существующей базы. Сведения сопоставления не представляют содержимого определяемых пользователем функций, хранимых процедур, триггеров и проверочных ограничений. Для большинства баз данных такого поведения достаточно.
Методом DataContext.CreateDatabase можно воспользоваться в произвольном числе случаев, особенно если доступен известный поставщик данных наподобие Microsoft SQL Server 2008. К числу типовых сценариев относятся.
Построение приложения, которое автоматически устанавливает себя на клиентской системе.
Построение клиентского приложения, которому требуется локальная база данных для сохранения своего автономного состояния.
Можно также вызвать с SQL Server метод DataContext.CreateDatabase, указав имя MDF-файла или каталога, в зависимости от строки соединения. LINQ to SQL использует строка подключения для определения базы данных, которую необходимо создать, и на каком сервере должна быть создана база данных.
Примечание.
При любой возможности применяйте встроенную безопасность Windows для соединения с базой данных, чтобы не требовались пароли в строке соединения.
Пример 1
В приведенном ниже коде дан пример того, как создать новую базу данных с именем 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
Пример 2
Для создания базы данных можно использовать модель объектов, выполняя следующее:
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
Пример 3
При построении приложения, которое автоматически устанавливает себя на клиентской системе, проверьте, существует ли уже база данных, и удалите ее перед созданием новой базы. Класс DataContext предоставляет методы DatabaseExists и DeleteDatabase для помощи в этом процессе.
Следующий пример показывает один из способов применения этих методов для реализации такого подхода.
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