方法 : データベースを動的に作成する (LINQ to SQL)

エンティティ クラスには、リレーショナル データベースのテーブルと列の構造を記述する属性があります。この情報を使用して、データベースの新しいインスタンスを作成できます。DataContextCreateDatabase メソッドを呼び出すと、オブジェクトで定義した構造を持つ新しいデータベース インスタンスが LINQ to SQL によって作成されます。

この機能はさまざまなシナリオで使用できますが、特に、SQL Server Express 2005 などの既知のデータ プロバイダを利用できる場合に適しています。一般的なシナリオとして、次のようなものが考えられます。

  • 顧客のシステムに自動的に自身をインストールするアプリケーションを作成している場合

  • オフライン状態を保存するためにローカル データベースを必要とするクライアント アプリケーションを作成している場合

    Bb399420.alert_note(ja-jp,VS.90).gifメモ :

    オブジェクト モデルのデータ属性では、既存のデータベースの構造のすべてがエンコードされるとは限りません。ユーザー定義関数、ストアド プロシージャ、トリガ、および CHECK 制約の内容は、属性では表現されません。CreateDatabase 関数で作成されるデータベースのレプリカには、オブジェクト モデルでエンコードされる情報だけが格納されます。これは多くのデータベースにとって十分な動作です。

接続文字列で .mdf ファイルまたは単にカタログ名を使用することにより、SQL Server でも CreateDatabase を使用できます。LINQ to SQL は、接続文字列を使用して、作成するデータベースおよびデータベースの作成先となるサーバーを定義します。

使用例

次のコードは、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();
}

LINQ to SQL には、新しいデータベースを作成する前に既存のデータベースを削除する API も用意されています。このドキュメントで既に示したシナリオ 1 のコードを変更して、既存のデータベースがないかどうかを最初に調べるようにできます。この方法を実装するには、DatabaseExists メソッドと DeleteDatabase メソッドを使用します。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
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)