既存のデータベースの code FirstCode First to an Existing Database

このビデオ、およびステップ バイ ステップ チュートリアルでは、既存のデータベースを対象とする Code First の開発の概要を提供します。This video and step-by-step walkthrough provide an introduction to Code First development targeting an existing database. コードを最初に使用すると、C を使用して、モデル定義#または VB.Net クラス。Code First allows you to define your model using C# or VB.Net classes. 必要に応じて追加の構成は、クラスやプロパティ、または fluent API を使用して属性を使用して実行できます。Optionally additional configuration can be performed using attributes on your classes and properties or by using a fluent API.

ビデオを見るWatch the video

このビデオはChannel 9 で利用可能します。This video is now available on Channel 9.

前提条件Pre-Requisites

必要ですがVisual Studio 2012またはVisual Studio 2013このチュートリアルを完了するをインストールします。You will need to have Visual Studio 2012 or Visual Studio 2013 installed to complete this walkthrough.

バージョンも必要になります6.1 (またはそれ以降) のEntity Framework Tools for Visual Studioをインストールします。You will also need version 6.1 (or later) of the Entity Framework Tools for Visual Studio installed. 参照してくださいEntity Framework の取得については、Entity Framework Tools の最新バージョンをインストールします。See Get Entity Framework for information on installing the latest version of the Entity Framework Tools.

1.既存のデータベースを作成します。1. Create an Existing Database

通常それは既に作成されて、既存のデータベースを対象としているときに、このチュートリアルではアクセスするデータベースを作成する必要があります。Typically when you are targeting an existing database it will already be created, but for this walkthrough we need to create a database to access.

データベースを生成してみましょう。Let's go ahead and generate the database.

  • Visual Studio を開くOpen Visual Studio

  • ビュー ->サーバー エクスプ ローラーView -> Server Explorer

  • 右クリックしてデータ接続 ->接続の追加.Right click on Data Connections -> Add Connection…

  • データベースに接続していない場合はサーバー エクスプ ローラーを選択する必要があります前にMicrosoft SQL Serverデータ ソースとしてIf you haven’t connected to a database from Server Explorer before you’ll need to select Microsoft SQL Server as the data source

    データ ソースの選択

  • LocalDB インスタンスに接続し、入力ブログデータベース名としてConnect to your LocalDB instance, and enter Blogging as the database name

    LocalDB の接続

  • 選択OKかどうかは、新しいデータベースを作成するように要求がある [はい]Select OK and you will be asked if you want to create a new database, select Yes

    [データベース] ダイアログを作成します。

  • 新しいデータベースがサーバー エクスプ ローラーに表示されますを右クリックして選択新しいクエリThe new database will now appear in Server Explorer, right-click on it and select New Query

  • 新しいクエリに、次の SQL をコピーし、クエリを選択します右クリックし、 ExecuteCopy the following SQL into the new query, then right-click on the query and select Execute

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('The Visual Studio Blog', 'http://blogs.msdn.com/visualstudio/')

INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('.NET Framework Blog', 'http://blogs.msdn.com/dotnet/')

2.アプリケーションを作成する2. Create the Application

簡単に、Code First を使用して、データ アクセスを実行する基本的なコンソール アプリケーションをビルドしていきます。To keep things simple we’re going to build a basic console application that uses Code First to perform data access:

  • Visual Studio を開くOpen Visual Studio
  • ファイル ->新機能 ->プロジェクト.File -> New -> Project…
  • 選択Windows左側のメニューとコンソール アプリケーションSelect Windows from the left menu and Console Application
  • 入力CodeFirstExistingDatabaseSample名としてEnter CodeFirstExistingDatabaseSample as the name
  • [OK] を選択します。Select OK

3.リバース エンジニア リング モデル3. Reverse Engineer Model

データベースにマップする初期コードを生成するために Entity Framework Tools for Visual Studio の使用になります。We’re going to make use of the Entity Framework Tools for Visual Studio to help us generate some initial code to map to the database. これらのツールが入力することも手動で使用する場合のコードを生成するだけです。These tools are just generating code that you could also type by hand if you prefer.

  • プロジェクト ->新しい項目を追加しています.Project -> Add New Item…

  • 選択データ左側のメニューをクリックしADO.NET Entity Data ModelSelect Data from the left menu and then ADO.NET Entity Data Model

  • 入力BloggingContext名をクリックしますOKEnter BloggingContext as the name and click OK

  • これにより、起動、 Entity Data Model ウィザードThis launches the Entity Data Model Wizard

  • 選択データベースから Code Firstクリック [次へ]Select Code First from Database and click Next

    1 つと、CFE ウィザード

  • 最初のセクションで作成したデータベースへの接続を選択し、クリックして [次へ]Select the connection to the database you created in the first section and click Next

    ウィザードの 2 つの CFE

  • 横のチェック ボックスをクリックしてテーブルすべてのテーブルのインポート をクリックして完了Click the checkbox next to Tables to import all tables and click Finish

    ウィザードの 3 つの CFE

リバース エンジニア リング プロセスが完了項目の数が追加されて、プロジェクトにみましょう見て何が追加されています。Once the reverse engineer process completes a number of items will have been added to the project, let's take a look at what's been added.

構成ファイルConfiguration file

App.config ファイルが追加されました、プロジェクトにこのファイルには、既存のデータベースへの接続文字列が含まれています。An App.config file has been added to the project, this file contains the connection string to the existing database.

<connectionStrings>
  <add  
    name="BloggingContext"  
    connectionString="data source=(localdb)\mssqllocaldb;initial catalog=Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"  
    providerName="System.Data.SqlClient" />
</connectionStrings>

わかります構成ファイル内の他の設定も、これらは Code First のデータベースを作成する場所を指示する既定の EF 設定です。アプリケーションでは、これらの設定は無視されます、既存のデータベースにマッピングしましたので。You’ll notice some other settings in the configuration file too, these are default EF settings that tell Code First where to create databases. Since we are mapping to an existing database these setting will be ignored in our application.

派生コンテキストDerived Context

A BloggingContextクラスがプロジェクトに追加されました。A BloggingContext class has been added to the project. コンテキストは、クエリを実行し、データを保存することができます、データベースとのセッションを表します。The context represents a session with the database, allowing us to query and save data. コンテキストを公開、 DbSet<TEntity> モデルの種類ごとにします。The context exposes a DbSet<TEntity> for each type in our model. また、基底コンストラクターを使用して、既定のコンストラクターを呼び出す、名 = 構文。You’ll also notice that the default constructor calls a base constructor using the name= syntax. このコンテキストで使用する接続文字列を構成ファイルから読み込む必要がある Code First 指示します。This tells Code First that the connection string to use for this context should be loaded from the configuration file.

public partial class BloggingContext : DbContext
    {
        public BloggingContext()
            : base("name=BloggingContext")
        {
        }

        public virtual DbSet<Blog> Blogs { get; set; }
        public virtual DbSet<Post> Posts { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }
    }

常に使用する必要があります、**名 =* 構文、構成ファイルで接続文字列を使用している場合。これにより、接続文字列が存在しない場合、Entity Framework がスローされます規則により、新しいデータベースを作成するのではなく。*You should always use the name= syntax when you are using a connection string in the config file. This ensures that if the connection string is not present then Entity Framework will throw rather than creating a new database by convention.

モデル クラスModel classes

最後に、ブログPostクラスもプロジェクトに追加されました。Finally, a Blog and Post class have also been added to the project. これらは、私たちのモデルを構成するドメイン クラスです。These are the domain classes that make up our model. Code First の規則は、既存のデータベースの構造と合っていない場所の構成を指定する、クラスに適用されるデータ注釈が表示されます。You'll see Data Annotations applied to the classes to specify configuration where the Code First conventions would not align with the structure of the existing database. たとえばに表示、 StringLength注釈Blog.NameBlog.Urlの最大長があるため200で、データベース (Code First の既定値がデータベース プロバイダー - でサポートされる最大長を使用するにはnvarchar (max) SQL server)。For example, you'll see the StringLength annotation on Blog.Name and Blog.Url since they have a maximum length of 200 in the database (the Code First default is to use the maximun length supported by the database provider - nvarchar(max) in SQL Server).

public partial class Blog
{
    public Blog()
    {
        Posts = new HashSet<Post>();
    }

    public int BlogId { get; set; }

    [StringLength(200)]
    public string Name { get; set; }

    [StringLength(200)]
    public string Url { get; set; }

    public virtual ICollection<Post> Posts { get; set; }
}

4.読み取りとデータの書き込み4. Reading & Writing Data

使用して一部のデータにアクセスするには、モデルができました。Now that we have a model it’s time to use it to access some data. 実装、 MainメソッドProgram.cs次のようです。Implement the Main method in Program.cs as shown below. このコードは、コンテキストの新しいインスタンスを作成し、新しい挿入を使用してブログします。This code creates a new instance of our context and then uses it to insert a new Blog. すべてを取得する LINQ クエリを使用してブログでアルファベット順では、データベースからタイトルします。Then it uses a LINQ query to retrieve all Blogs from the database ordered alphabetically by Title.

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

アプリケーションを実行し、テストを実行できるようになりました。You can now run the application and test it out.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
.NET Framework Blog
ADO.NET Blog
The Visual Studio Blog
Press any key to exit...

データベースが変わった場合でしょうか。What if My Database Changes?

Code First Database ウィザードには、クラスを調整し、変更することができますの開始地点のセットを生成しています。The Code First to Database wizard is designed to generate a starting point set of classes that you can then tweak and modify. データベース スキーマが変更された場合か、手動でクラスを編集したりクラスを上書きする別のリバース エンジニア リングを実行できます。If your database schema changes you can either manually edit the classes or perform another reverse engineer to overwrite the classes.

既存のデータベースの Code First Migrations を使用します。Using Code First Migrations to an Existing Database

既存のデータベースで Code First Migrations を使用する場合を参照してください。既存のデータベースの Code First Migrationsします。If you want to use Code First Migrations with an existing database, see Code First Migrations to an existing database.

まとめSummary

このチュートリアルでは、既存のデータベースを使用して Code First の開発に説明しました。In this walkthrough we looked at Code First development using an existing database. Entity Framework Tools for Visual Studio を使用して、リバース エンジニア リング、データベースにマップされ、データを格納および取得される可能性がありますクラスのセットをしました。We used the Entity Framework Tools for Visual Studio to reverse engineer a set of classes that mapped to the database and could be used to store and retrieve data.