Category Archives: Visual Studio

C# : Entity Framework(.NET Fx 3.5)についての簡単なまとめ

もういささか古い情報になってしましたが、.NET Framework 3.5 SP1のEntity Frameworkについて簡単にまとめます。

まぁ俺様用防備録。

対象となるデータの構造

説明の対象となるデータは以下のような構造を持つとします。

image

データの検索

リレーション先のデータを含めて検索(クエリー)をするにはfrom句でエンティティオブジェクトを指定するときに.Include()をつけて、検索結果に含めるリレーション先オブジェクトへのパスを指定します。

以下の例では子のShipエンティティtに対するクエリーで、関連している親のProjectエンティティのオブジェクトを含むようにLinq式で指定しています。

using (ImportEntities entity = new ImportEntities()) { 
    var ships = from s in entity.Ship.Include("Project")
                select s;
    var shipList = ships.ToList();
    foreach (var s in ships) {
        
        string message = "Project id: " + s.Project.id.ToString() +  " Ship id: " + s.id.ToString() + " Ship name: " + s.shipName;
        MessageBox.Show(message);
    }

}

また、親から子方向であれば以下のようにシンプルに書くこともできる。

var projects = from p in entity.Project
               select p;
foreach (var project in projects) {
    string message = project.id + ", " + project.projectName + "\r\n";
    foreach (var ship in project.Ship) {
        message += ship.shipName + "\r\n";
    }
    MessageBox.Show(message);
}

データの追加

親テーブルであるProjectへのデータ追加に関しては以下のようなコードになります。ADO.NETのデータセットを知っている人にとっては理解しやすいコードです。

using (ImportEntities entity = new ImportEntities()) {
    Project pro = new Project();
    pro.projectName = "ジャカルタ";
    entity.AddToProject(pro);
    entity.SaveChanges();
}

子テーブルであるShipへのデータ追加については親テーブルとのリレーション(関係)をナビゲーションプロパティを使って定義しなければならないのでやや複雑になります。

using (ImportEntities entity = new ImportEntities()) {
    //リレーションを定義するためにProjectテーブルの該当データにアタッチする。
    Project pro = new Project() { id = 1 };
    entity.AttachTo("Project", pro);
    //子テーブルにデータを挿入する
    //ここではProject = proでテーブル間のリレーションを定義してやる
    Ship ship = new Ship() { shipName = "はごろも丸", Project = pro };
    entity.AddToShip(ship);
    entity.SaveChanges();
}

データの更新

子テーブルであるShipへのデータ更新について見てみます。

更新対象がわかっているなら、更新対象を特定し、アタッチしたら、更新対象のプロパティを変更します。

using (ImportEntities entity = new ImportEntities()) {
    Ship ship = new Ship() { id = 1 };
    entity.AttachTo("Ship", ship);
    ship.shipName = "任天堂丸";
    entity.SaveChanges();
}

データの削除

子テーブルのデータの削除についても、基本的には子テーブルへのデータ追加と同じでリレーションをとってアタッチしてからとなります。

using (ImportEntities entity = new ImportEntities()) {
    //該当する親テーブルのオブジェクトを作成する。
    Project pro = new Project() { id = 1 };
    //データ輪削除する子テーブルのオブジェクトを作成し、リレーションを設定する
    Ship ship = new Ship() { id = 1, Project = pro };//リレーションの定義をする
    //アタッチする
    entity.AttachTo("Ship", ship);
    //削除する
    entity.DeleteObject(ship);
    entity.SaveChanges();
}

接続文字列

設定ファイル記述等により動的に接続サーバーを変更する必要がある場合には、SqlConnectionStringBuilderクラスと EntityConnectionStringBuilderクラスを使用して接続文字列を生成します。(通常本運用と開発ではSQL Serverが違うし、そんな設定項目にするよね。)

sqlBuilder = new SqlConnectionStringBuilder();
sqlBuilder.InitialCatalog = dbName;
sqlBuilder.DataSource = serverName;
sqlBuilder.IntegratedSecurity = true;

entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.Metadata = "res://*/ModelOfLogDatabase.csdl|res://*/ModelOfLogDatabase.ssdl|res://*/ModelOfLogDatabase.msl";

MetaDataはEDMのデザイナーが生成する接続文字列から持ってきます。

image

この接続文字列を使ってエンティティコンテナがデータベースサーバにアクセするようにするには、エンティティコンテナのコンストラクタの引数にこの接続文字列を指定します。

var context = new ImportEntities(entityBuilder.ConnectionString)

Visual Studio LightSwitch

http://www.microsoft.com/visualstudio/en-us/lightswitch

くわしくはJasonのBlogを確認していただくとして、これが何かというと完全のノーコーディングでビジネスアプリを作っちゃおうというものです。当然ドメイン的な制約はあるわけですが、世の中のビジネスアプリケーションのほとんどが実は単票入力、集計アプリケーションである事実を考えれば、これでほとんどカバーできてしまうのかもと思う次第。

いやー何このお気楽さ。

実際に触れるものの公開はもうちょっと先みたいなので、楽しみですね。

まぁInfoPathの立場は?とか思ったりもしますけど。

先ほどのBlogからスクリーンショットをちょっとお借りして。。。

Continue reading Visual Studio LightSwitch

近々Channel 9のサイトがリニューアルするようです。

ということで、プレビューサイトがオープンしたようです。

Check out this preview of an all new Channel 9. We’re looking forward to your feedback and suggestions. If you are interested in how it was built and the decisions we made about the architecture, check out this video with Charles and Sampy.

Preview The New Channel 9 | jeffsand | Channel 9

image

なかなかいいんじゃないでしょうか。

Windows Phone Developer Tools Beta Released

WP7 SDKがTechnical PreviewからBetaにあがりました。

First things first: go get the Windows Phone Developer Tools Beta. It has arrived!

The term “Beta” is understood to mean that things are close to being finished.  Well, that’s what we mean anyway. This Beta release represents the near final version of the tools for building applications and games for Windows Phone 7. 

Since the initial CTP release of the tools just this March, the Windows Phone Developer Tool CTP has been widely embraced by the community, and they have shown what’s possible on our new development platform.

It’s time to get serious about building the actual apps and games for Windows Phone 7 that consumers will be looking for starting this holiday season.

Windows Phone Developer Tools Beta Released

機能追加点、変更点についてはリリースノートを。

FMラジオ向けのクラスなんかが追加されていますね。

Windows Azure Tools for Microsoft Visual Studio 1.2 (2010 年 6 月)

そゆもの。紺碧に魅せられた人々にとっては待望のリリース。

ダウンロードの詳細 : Windows Azure Tools for Microsoft Visual Studio 1.2 (2010 年 6 月)

だが事前準備がいるので注意が必要だ。

上ページの「必要システム」をよくよく確認してからインストールしよう。

Microsoft teched US : Deep Dive into Microsoft ADO.NET Entity Framework

Get Microsoft Silverlight

Deep Dive into Microsoft ADO.NET Entity Framework

名称からするとあれですが、内容的にはEF 4での仕組み部分での総括的な内容です。とは言ってもそんなにインターナルな内容でもなく、利用者として知っておいた方がいいレベルなので、すごく難しい内容ではなかったです(除く英語)。

ということで気が向いたら(w)US TechEdで目についたセッションのビデオを紹介していきます。

Silverlight 4 Tools(日本語版)

さりげなくダウンロード可能になっていた模様。

ダウンロードの詳細 : Silverlight 4 Tools

このダウンロード ファイルによって、以下に示す、Silverlight 4 および RIA Services の開発に必要なすべてのコンポーネントがインストールされます。

  • Silverlight 4 開発者ランタイム
  • Silverlight 4 SDK (ソフトウェア開発キット)
  • Visual Studio 2010 および Visual Web Developer Express 2010 用の更新プログラム (KB982218)
  • Silverlight 4 Tools for Visual Studio 2010
  • WCF RIA Services V1.0 for Silverlight 4
  • F# Runtime for Silverlight 4

第27回関東勉強会資料 開発から見たWindowsの国際化機能

セッションで使用した資料とサンプルコードを以下に公開します。

(2011/10/30 20:44)資料がリンク先が存在しないのでSkyDriveにファイルを上げ、そこからダウンロードできるように修正しました。