Поделиться через


Как динамически создать базу данных (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 использует строку соединения для определения создаваемой базы данных и сервера, на котором она должна создаваться.

Bb399420.alert_note(ru-ru,VS.90).gifПримечание.

При любой возможности применяйте встроенную безопасность 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)

Другие ресурсы

Дополнительные сведения (LINQ to SQL)

Внесение и отправка изменений данных (LINQ to SQL)