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