オブジェクトデータベース LINQ, DLinq のスレ (158レス)
上下前次1-新
42(2): 2007/09/12(水)03:40 ID:??? AAS
「オブジェクトデータベース」とはちょい違うよな。
DBに被せるレイヤとかラッパって感じ。
43: 2007/09/12(水)16:11 ID:??? AAS
>>41>>42
テンプレも含めた案をお願いします。
私は、これからの流れとして、「オブジェクトデータベース」を
つけたほうが良いと解釈していたのですが。
44: 2007/09/12(水)19:54 ID:??? AAS
オブジェクトデータベースといったら普通はOODBで、ORMはOODBではない。
いまのところサポートしてるのはSQLサーバーだけだし。
45: 2007/09/12(水)20:09 ID:??? AAS
オブジェクトデータベースなんて十数年前にその実力以上に妙に
持ち上げられて、RDBの次はODBだなんて言われたこともあるけど、
今じゃ落ち着くところに落ち着いただろ。
「これからの流れ」というより、うさんくさい目で見られる可能性の方が
高いと思うけどねぇ。数年前のXML-DBとおんなじで。
それはともかく、LINQが想定しているのはリレーショナルモデルだから
オブジェクトデータベースとは違うと思うよ。
どちらかというと、3GL埋め込みSQLを今風にOO言語をホスト言語に
してみたらこんなんできましたぁ、ってところだよね。
46(1): 2007/09/13(木)23:11 ID:??? AAS
単純なラッパーではないということだが
47(1): 2007/09/14(金)07:22 ID:??? AAS
で、スレタイはどうしたらよいの?
48(1): 42 2007/09/14(金)08:18 ID:??? AAS
>>46
ラッパーではないっていうのは、「厚み」の問題? もっと根本的に違うとか?
>>47
この調子じゃあ、どう見積もっても次のスレタイを考えるまでに十分な時間がある。
LINQとは何か、結論出てからでいいんじゃね?
LINQってMSの日本語訳によれば、「 .NET 統合言語クエリ」だから、まあそんなとこ
なんじゃね?
49(1): 2007/09/14(金)23:25 ID:??? AAS
じゃ、とりあえず次スレのタイトルおよびテンプレ案を書いておきます。
「.NET 統合言語クエリ LinQ DLinq のスレ」
マイクロソフトのコードネーム Orcas に搭載予定のオブジェクトデータベースを
実現する、言語統合クエリ(LINQ Language integrated query)
DLINQ (LINQの実装) などについて語り合いましょう。
The LINQ Project
http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx
50: 2007/09/14(金)23:57 ID:??? AAS
人の話聞かねぇ香具師だな
51: 2007/09/15(土)01:55 ID:??? AAS
聞いてるじゃないかw
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
上下前次1-新書関写板覧索設栞歴
あと 97 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.011s