如何:动态创建数据库

在 LINQ to SQL 中,对象模型映射到关系数据库。 通过使用基于属性的映射或外部映射文件启用映射,以描述关系数据库的结构。 在两种方案中,存在足够的有关使用 DataContext.CreateDatabase 方法创建新的数据库实例的关系数据库的信息。

DataContext.CreateDatabase 方法仅根据对象模型中已编码的信息创建数据库的副本。 映射文件和您的对象模型中的属性可能不会对有关现有数据库结构的所有内容都进行编码。 映射信息不表示用户定义的函数、存储过程、触发器或 CHECK 约束的内容。 这种行为足以满足各种数据库的需要。

您可以在任意数量的方案中,尤其是在已知数据提供程序(如 Microsoft SQL Server 2008)可用时,使用 DataContext.CreateDatabase 方法。 典型的方案包括:

  • 您正在生成自动将自身安装到客户系统上的应用程序。

  • 您正在生成需要用本地数据库来保存其脱机状态的客户端应用程序。

您还可以通过使用 .mdf 文件或只使用目录名(取决于您的连接字符串),将 DataContext.CreateDatabase 方法与 SQL Server 一起使用。 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 类提供帮助您完成此过程的 DatabaseExistsDeleteDatabase 方法。

下面的示例演示使用这些方法来实现此方法的一种方式:

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

请参阅