atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • プログラミング図書館・本館
  • .NET
  • Code First Programming Model
  • CTP5

CTP5

最終更新:2011年02月21日 16:47

atachi

- view
管理者のみ編集可
  • コードの実装と実行(サンプルプロジェクト) [#bbade62b]
  • データベースの中身を確認 [#wc6394e8]
  • 規約 [#o05896e2]
    • 主キーの規約 [#s241b71a]
    • 外部キーの規約 [#m3f92475]
    • 複合型の使用 [#j6835111]
    • スキーム変更の適応
  • データアノテーション [#b897697b]
    • 主キーの設定 [#t2c94384]
    • フィールドへの制約を設定 [#raa57f88]
    • 関連設定 [#p1491810]
  • 動的なテーブル作成
  • データの取得

コードの実装と実行(サンプルプロジェクト)

データベースへの接続にはSQLServerCompact4を使っています。

このサンプルプロジェクトでは、Categoryテーブルにデータを追加するだけのサンプルです。 一回目の実行は正常に終了しますが、 二回目の実行は失敗 します。 これは、Categoryテーブルの主キーはユニークでなければならないため、一回目の実行で「FOOD」という値を持ったレコードが保存されているので、二回目の実行で「FOOD」という値を持ったレコードを作成できないためです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.Data.Entity.Database;
 
namespace Ef4Ctp5
{
	class Program
	{
		static void Main(string[] args)
		{
			DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
 
			using (var db = new ProductContext())
			{
				// Add a food category 
				var food = new Category { CategoryId = "FOOD", Name = "Foods" };
				db.Categories.Add(food);
				int recordsAffected = db.SaveChanges();
 
				Console.WriteLine(
					"Saved {0} entities to the database, press any key to exit.",
					recordsAffected);
 
				Console.ReadKey();
			}
		}
	}
 
	public class ProductContext : DbContext
	{
		public DbSet<Category> Categories { get; set; }
		public DbSet<Product> Products { get; set; }
	}
 
	/// <summary>
	/// エンティティ
	/// </summary>
	public class Category
	{
		public string CategoryId { get; set; }
		public string Name { get; set; }
 
		public virtual ICollection<Product> Products { get; set; }
	}
 
 
	/// <summary>
	/// エンティティ
	/// </summary>
	public class Product
	{
		public int ProductId { get; set; }
		public string Name { get; set; }
		public string CategoryId { get; set; }
 
		public virtual Category Category { get; set; }
	} 
 
}

データベースの中身を確認

データベースにSQLCE4を使用している場合は、SQLCE4用のデータベースビューワーが別途必要です(VS2010のデータベースエクスプローラーはSQLCE3.5までしか対応していない)
下記のサイトからSQLCE4で作成したデータベースファイルを表示するソフトをダウンロードすることができます。

  • SQL Server Compact Toolbox

規約

多くの設定は規約により初期設定が定義されています。(規約についてはこちらのブログポストも参照)

  • 主キーの規約
  • 外部キーの規約
  • 逆関連設定
  • 複合型の使用

プログラマが任意にこれらの規約を再設定したい場合はアノテーションを使用します。

アノテーションを使用するには「System.ComponentModel.DataAnnotations」アセンブリをプロジェクトに参照してください

主キーの規約

ブログポストを引用しています。

Previously Code First would infer that a property is a primary key if the property is called ‘Id’ or ‘<class name>Id’.
The only change to this convention is that once primary key properties are detected if their type is ‘int’, ‘long’ or ‘short’, they 
are registered as identity columns in the database by default. Primary key detection is not case sensitive.

この記述にもあるように、モデルクラスのプロパティで「Id」もしくは「クラス名+Id」という名前を主キーとします。

外部キーの規約

インスタンスとしての参照先のクラスに主キーとなるプロパティが存在する場合は、外部キーに相当するプロパティをクラス定義に記述することをしなくても自動的に外部キーを作成しマッピングします。

public class Person
{
	[Key]
	public virtual Int32 PersonId{get;set;}
 
	public virtual string Name{get;set;}
}
 
public class Student
{
	public virtual Int32 StudentId{get;set;}
 
	// 外部キーによって結びつけられるインスタンス
	public virtual Person Person{get;set;}
}

複合型の使用

主キーがない型がエンティティモデルに設定されている場合、それは外部キーによる参照制限ではなく複合型としてマッピングされます。

public class Person {
	public int PersonId { get; set; }
 
	// Nameクラスは主キーが定義されていないので
	// このフィールドは関連としてではなく複合型でマッピングされる
	public Name Name { get; set; }
}
 
// Keyアノテーションを使って主キーを定義していないクラス
public class Name {
	public string Title { get; set; }
	public string FirstName { get; set; }
	public string LastName { get; set; }
}

スキーム変更の適応

下記のコードではエンティティモデルに変更があった場合に、データベースのスキームを変更します。
ただし、変更方法として、一度テーブルをDROP(削除)してからテーブルを作成する方法のため、 既存のデータはすべて失われます 。

DbDatabase.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDataContext>());

データアノテーション

プログラマによってマッピングの設定を任意に行うことができます。
これは規約をオーバーライドすることができます。

いくつかのアノテーションは.NET Frameworks4に含まれているもので「System.ComponentModel.DataAnnotations.dll」に含まれています。
プロジェクト内でアノテーションを使用するには、このDLLも忘れずに参照設定へ加えます。

主キーの設定

Keyアノテーションを使って設定します。
コードファーストの規約では主キーはint型やlong型が選択されますが、Keyアノテーションを使うと任意のプロパティを主キーとしてマッピングできます。

public class Person{
	[Key]
	public string PersonId{get;set;}
}

フィールドへの制約を設定

StringLength
文字列型に対して格納可能な文字数を制限します。
MaxLength
文字列型に対して、格納可能な文字数の最大値を設定します。
MinLength
文字列型に対して、格納可能な文字数の最小値を設定します。
ConcurrencyCheck
Required
NULL値を許容しないか。
Timestamp
DataMember
DatabaseGenerated
フィールドの値がデータベースによって作成されることを示します。
多くのデータベース設計では、主キーはAUTO INCREMENTを使ってデータベースが自動的に番号を振り分けます。
また、TIMESTAMP型のフィールドは自動的にレコードの更新日時を保存します。
NotMapped
データベースとのマッピングを行う必要のないプロパティです。

関連設定

2つのモデル間で外部キーと主キーが規約によって見つけることができる場合には、関連設定を記述する必要はありません。
次の例は主キー(SSN)と外部キー(AuthorSSN)が規約とは異なるため、RelatedToアノテーションで明示しています。

public class Book {
	[Key]
	public string ISBN { get; set; }
 
	[StringLength(256)]
	public string Title { get; set; }
 
	public string AuthorSSN { get; set; }
 
	[RelatedTo(RelatedProperty=“Books”, Key=”AuthorSSN”, RelatedKey=”SSN”)]
	public Person Author { get; set; }
}
 
public class Person {
	[Key]
	public string SSN { get; set; }
 
	[StringLength(512)]
	public string Name { get; set; }
 
	[RelatedTo(RelatedProperty=”Author”)]
	public ICollection<Book> Books { get; set; }
}

動的なテーブル作成

FluentAPIを使ってプログラマブルにテーブルを定義することができます。
詳細は下記のサイトを参照してください。

  • http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

データの取得

DbSetはIQuaryableをインターフェースとして持っています。
よって、LINQを使ってデータの検索を行うことができます。

// PersonIdをキーにして検索を行う。
string key = "1";
 
var person = (from p in MyCbContext.Persons
              where p.PersonId == key
              select p).Single();

LINQについてはこちらのページを参照してください。

「CTP5」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


プログラミング図書館・本館
記事メニュー

C#

  • 新機能
  • 言語文法
    • 型
    • 関数
    • クラス
    • 演算子
    • 構文
    • デリゲート
    • イベント
    • 例外処理
    • アトリビュート
    • 名前空間
    • ジェネリクス
  • リフレクション
  • LINQ

.NET Frameworks

  • 数値
  • 文字列
  • 日付時刻
  • オブジェクト
  • コレクション
  • ファイルシステム
  • スレッド
  • データテーブル
  • グラフィックス
  • デバッグ
    • ログ出力
    • ユニットテスト
  • ユーティリティ
  • ネットワーク
    • HTTP
  • デバイス
    • COMポート
  • EntityFrameworks
    • Code First Programming Model
  • デバイスドライバ
    • WinUSB

WPF

  • XAML
  • イベント
  • コマンド
  • スタイル
  • データバインディング
  • コンポーネント
  • グラフィックス
  • カスタムコンポーネント
    • 依存関係プロパティ

アプリケーション

  • 二重起動の防止
  • アンマネージドDLLの読み込み
  • 外部のアプリケーションを起動

VisualStudio

  • 拡張機能
  • カラー設定

ライブラリ

  • WPFToolkit
  • A Fast CSV Reader
  • AvalonDock

実装方法

  • ドラッグアンドドロップ
  • アプリケーション内のドラッグアンドドロップ
  • CSVからDataTable

minecraft

  • Bukkit
  • プラグイン
    • Permissions
    • SlowHealth
    • CookieMonster
    • iConomy
    • WorldGuard
    • Lockette
    • MyHome
    • BorderGuard

サイトについて

プロフィール/リンク/未分類

メモ/ゲーム/Stacks/Omoikane


更新履歴

取得中です。

ここを編集

記事メニュー2

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集

人気記事ランキング
  1. A Fast CSV Reader
  2. VisualStudio/拡張機能
  3. MyHomeプラグイン
もっと見る
最近更新されたページ
  • 5044日前

    Bukkit
  • 5051日前

    トップページ
  • 5072日前

    メニュー
  • 5082日前

    WPF/グラフィックス
  • 5082日前

    .NET/グラフィックス
  • 5082日前

    .NET/グラフィックス/画像の書き込み
  • 5082日前

    .NET/グラフィックス/画像の読み込み
  • 5088日前

    .NET/コレクション
  • 5106日前

    .NET/WinUSB
  • 5140日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. A Fast CSV Reader
  2. VisualStudio/拡張機能
  3. MyHomeプラグイン
もっと見る
最近更新されたページ
  • 5044日前

    Bukkit
  • 5051日前

    トップページ
  • 5072日前

    メニュー
  • 5082日前

    WPF/グラフィックス
  • 5082日前

    .NET/グラフィックス
  • 5082日前

    .NET/グラフィックス/画像の書き込み
  • 5082日前

    .NET/グラフィックス/画像の読み込み
  • 5088日前

    .NET/コレクション
  • 5106日前

    .NET/WinUSB
  • 5140日前

    BorderGuardプラグイン
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. まどドラ攻略wiki
  3. MadTown GTA (Beta) まとめウィキ
  4. R.E.P.O. 日本語解説Wiki
  5. シュガードール情報まとめウィキ
  6. ソードランページ @ 非公式wiki
  7. ヒカマーWiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. Dark War Survival攻略
  10. AviUtl2のWiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  5. 初音ミク Wiki
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 検索してはいけない言葉 @ ウィキ
  8. 発車メロディーwiki
  9. Abiotic Factor 日本語攻略Wiki
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  3. モンスター一覧_第2章 - モンスター烈伝オレカバトル2@wiki
  4. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  5. 女神アルテミス - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  6. 市長補佐 - ストグラ まとめ @ウィキ
  7. 山下 ひろし - ストグラ まとめ @ウィキ
  8. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. 無幻銃士ダルタン - モンスター烈伝オレカバトル2@wiki
  10. 危険度7 - 検索してはいけない言葉 @ ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.