方法: データベースを動的に作成するHow to: Dynamically Create a Database

LINQ to SQL では、オブジェクト モデルをリレーショナル データベースに対応付けます。In LINQ to SQL, an object model is mapped to a relational database. マッピングを有効化するには、属性ベースの対応付けか、リレーショナル データベースの構造を記述した外部マッピング ファイルを使用します。Mapping is enabled by using attribute-based mapping or an external mapping file to describe the structure of the relational database. いずれの場合も、DataContext.CreateDatabase メソッドを使用してデータベースの新しいインスタンスを作成するために必要な、リレーショナル データベースに関する十分な情報が提供されます。In both scenarios, there is enough information about the relational database that you can create a new instance of the database using the DataContext.CreateDatabase method.

DataContext.CreateDatabase メソッドで作成されるデータベースのレプリカには、オブジェクト モデル内でエンコードされる情報だけが格納されます。The DataContext.CreateDatabase method creates a replica of the database only to the extent of the information encoded in the object model. マッピング ファイルおよびオブジェクト モデルの属性では、既存のデータベースの構造のすべてがエンコードされるとは限りません。Mapping files and attributes from your object model might not encode everything about the structure of an existing database. ユーザー定義関数、ストアド プロシージャ、トリガー、または CHECK 制約の内容は、マッピング ファイルでは表現されません。Mapping information does not represent the contents of user-defined functions, stored procedures, triggers, or check constraints. これは多くのデータベースにとって十分な動作です。This behavior is sufficient for a variety of databases.

DataContext.CreateDatabase メソッドはさまざまなシナリオで使用できますが、特に、Microsoft SQL Server 2008 などの既知のデータ プロバイダーを利用できる場合に適しています。You can use the DataContext.CreateDatabase method in any number of scenarios, especially if a known data provider like Microsoft SQL Server 2008 is available. 一般的なシナリオとして、次のようなものが考えられます。Typical scenarios include the following:

  • 顧客のシステムに自動的に自身をインストールするアプリケーションを作成している場合You are building an application that automatically installs itself on a customer system.

  • オフライン状態を保存するためにローカル データベースを必要とするクライアント アプリケーションを作成している場合You are building a client application that needs a local database to save its offline state.

接続文字列で .mdf ファイルまたは単にカタログ名を使用することにより、SQL Server でも DataContext.CreateDatabase メソッドを使用できます。You can also use the DataContext.CreateDatabase method with SQL Server by using an .mdf file or a catalog name, depending on your connection string. LINQ to SQLLINQ to SQL 接続文字列を作成するデータベースを定義して、データベースがどのサーバーを作成します。uses the connection string to define the database to be created and on which server the database is to be created.

注意

可能な限り、データベースへの接続には Windows 統合セキュリティを使用してください。これにより、接続文字列にパスワードを含める必要がなくなります。Whenever possible, use Windows Integrated Security to connect to the database so that passwords are not required in the connection string.

Example

次のコードは、MyDVDs.mdf という名前の新しいデータベースを作成する例です。The following code provides an example of how to create a new database named 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

Example

次のようにすると、オブジェクト モデルを使用してデータベースを作成できます。You can use the object model to create a database by doing the following:

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

Example

顧客のシステムに自動的に自身をインストールするアプリケーションを作成している場合、新しいデータベースを作成する前に既存のデータベースがあるかどうかを確認して削除します。When building an application that automatically installs itself on a customer system, see if the database already exists and drop it before creating a new one. DataContext クラスには、このプロセスに役立つ DatabaseExists メソッドと DeleteDatabase メソッドが用意されています。The DataContext class provides the DatabaseExists and DeleteDatabase methods to help you with this process.

次の例は、これらのメソッドを使用してこの方法を実装する 1 つの方法を示しています。The following example shows one way these methods can be used to implement this approach:

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

関連項目See also