オブジェクトデータベース LINQ, DLinq のスレ (158レス)
1-

52: 2007/09/15(土)22:38 ID:??? AAS
Linqって、NHibernateのCriteriaみたいなもの?

マッピング情報をXMLに書き出さなければならない点で、
DLinqはNHibernateに負けているような希ガス。

MSは、こんなものを実装する前に、
ADO.NETドライバの仕様を弄って、
NHibernateを使えなくしたほうが良くねw
53
(1): 2007/09/16(日)13:40 ID:??? AAS
DLinqで使ってるExpression型のLinq構文はCriteriaみたいなものであってる。
普通のLinqで使ってるdelegate型のLinq構文は別物。
マッピング情報は属性(アノテーション)に書き込むタイプ。
開発の手順はDBのスキーマからdbml(xml形式)のファイルを生成。
必要に応じてdbmlを変更。dbmlから属性付きデータクラスを生成となる。
ADO.NETのDataSetと同じで実行時にxmlファイルを参照するわけではない。
54
(1): 2007/09/17(月)01:18 ID:??? AAS
>>48
聞きかじりなので詳しくは分からないんだけど、
ぱっと見で単なるラッパーのようだが目指すところはそれだけではないとのこと
なので、ラッパーだと思ってスルーしている人も
情報収集しておいた方がいいかも?って感じかな

>>49
大文字小文字の使い分けは意味がある?
LINQは全部大文字なのでは?違うのかな… orz

>>53
dbmlファイルってRDBMS使うときの過渡的なものだっけ?
省1
55: 2007/09/17(月)01:40 ID:??? AAS
>>54
全部大文字(現行スレのタイトル)が正しいです。
ミスでした。(^^;
56
(5): 2007/09/17(月)06:07 ID:XYLLhqYU(1) AAS
LINQはさて置いてもDLinqはまだあんまり知られてない感じだから、
ここでデモプロ1本作ってみるよ。数回の連載になるけど過疎ってるから勘弁な。

とりあえず環境はSQL2005Express+.NET3.5日本語Betaでおkすよ。VS2008なしでいける。

まずはDBを作ります。ShopとCustomerで1:nの関係。
sqlcmd -S .\sqlexpress
接続できたら
create database DLinqDemo
go
use DLinqDemo
go
省6
57
(1): 56 2007/09/17(月)06:21 ID:??? AAS
.NET3.5日本語Beta2だけでやるときは3.5と2.0の両方にパスが通ってなきゃいかんので注意。
Path=C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;%PATH%

コマンドプロンプトからSqlMetalコマンドを実行します。
sqlmetal /server:.\sqlexpress /database:DLinqDemo /dbml:DLinqDemo.dbml /namespace:demo
userdb.dbmlを編集。ただし今回は編集の必要なし。
もし共用のDBを使ってるなら全ユーザーテーブルが入ってるのでいらないのは削除。

データクラス+マッピング属性のDLinqDemo.csを生成。
DLinqDemo.csはデータベースから直接も作れるのだけど2段階に分けたほうが後々便利。
sqlmetal /code:DLinqDemo.cs DLinqDemo.dbml
58: 56 2007/09/17(月)06:46 ID:??? AAS
以下が基本形でDemoListのようなstaticメソッドが今後増えてくる塩梅です。
コンパイルは cs /o demo.cs DLinqDemo.cs

// demo.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace demo {
 class Demo {
  static readonly string conn = 
省23
59: 56 2007/09/17(月)07:03 ID:??? AAS
LINQ構文が2つあるけど上段がORM風に更新可能なCustomerオブジェクトを取得している。
クエリーしてないのに関連をたどってShopの情報も取れる。
下段は普通のLINQ風の構文で更新不可。アドホックなクエリーに使う。

demo.exeに適当な引数をつけると、DLinqがどんなSQLをデータベースに投げてるか見れる。
demo.exe log

データが入ってないので次回はデータを入れたいが、繰り返し実行できるように
テーブルを消してしまう処理を書いておこう。
これはデータを直接生のSQLを投げて消してしまうもので、
ORMのキャッシュはスルーしてしまうので注意。あくまでも初期化用。

  static void Cleanup() {
省6
60: 2007/09/17(月)07:10 ID:??? AAS
データの登録。
shop1に対してCostomerを2件。
shop2に対してCostomerを3件追加している。
それぞれ別のやり方で登録してるから見比べて欲しい。

  static void DemoAdd() {
   using(DLinqDemo dc = new DLinqDemo(conn)) {
     if (logFlg) dc.Log = Console.Out;
     var shop1 = new Shop() { ID = "A001", Name="WAHAHA" };
     shop1.Customer.Add(new Customer() { Name="AAAA BBBB" });
     shop1.Customer.Add(new Customer() { Name="AAAA CCCC" });
省13
61: 56 2007/09/17(月)07:13 ID:??? AAS
最後は変更や削除の例。ちょっと意味不明な処理だがあくまでもデモ用としてみてくれ。

  static void DemoModify() {
   using(DLinqDemo dc = new DLinqDemo(conn)) {
     if (logFlg) dc.Log = Console.Out;
     var qr = from c in dc.Customer
              where c.Name == "RRRR CCCC" || c.Name == "AAAA CCCC"
              select c;
     var rs = qr.ToList();
     foreach (var r in rs) {
       if (r.Name == "RRRR CCCC") r.Name = "YYYY CCCC*";
省6
62: 2007/09/22(土)22:01 ID:??? AAS
>>56
デモプログラムサンクス。
ちなみに何処の解説を参考にして書いたの?
63: 2007/10/04(木)07:53 ID:??? AAS
sage
64: 2007/10/22(月)07:46 ID:??? AAS
sage
65: 2007/11/08(木)19:37 ID:??? AAS
さげ
66: 2007/11/12(月)23:42 ID:??? AAS
sage
67: [age] 2007/11/17(土)18:55 ID:??? AAS
age
68: 2007/12/02(日)12:02 ID:jhMQgNuU(1) AAS
age
69: 2007/12/10(月)19:31 ID:7fB17NBW(1) AAS
age
70: 2007/12/11(火)03:31 ID:??? AAS
>>57
リリース版の.NET3.5にsqlmetalが付いて来なくなってる。SDKはまだか。
71: [age] 2007/12/30(日)08:54 ID:??? AAS
さて、正式版がリリースされたけど、みんなつかってみた?
1-
あと 87 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.007s