OracleでLINQ to SQL
ちょっと調べた限りでは、LINQ to SQLはOracleに対応していないようです。私はSQL Serverがさっぱりなので、これではLINQ to SQLで遊べません。(^^; 悔しいので、ググってみたら、http://code2code.net/DB_Linq/というものを発見しました。素のままのLINQ to SQLにくらべて手間は増えますが、これで行けそうな感じです。
手順
- 上記サイトからソースコードをダウンロードし、ビルドします。今回はOracleなのでDbLinq_OracleOnly.slnを使います。すると、DBLinq.Oracle.Prototype.dllが作成されます。
- 次にサンプルプロジェクトを用意して、先ほどのアセンブリを参照に追加します。
- 以下のコードを打ち込みます。もし、ユーザ、パスワードをscott/tigerから変更している場合は、適宜修正してください。
using System; using System.Linq; using System.Data.Linq.Mapping; using DBLinq.Linq; namespace DBLinqForOracle { /// <summary> /// データベース。 /// </summary> /// <remarks> /// MContextは抽象クラスなので、必ず具象クラスを用意する必要がある。 /// </remarks> class OracleDB : MContext { public OracleDB(string conn) : base(conn) { Employees = new MTable<Employee>(this); } public readonly MTable<Employee> Employees; } [Table(Name="EMP")] public class Employee : IModified { /// <summary> /// コンストラクタ。 /// </summary> /// <remarks> /// デフォルトコンストラクタとフィールドの初期値を取るコンストラクタの両方が必須。 /// </remarks> public Employee() { } public Employee(decimal no, string name) { this.No = no; this.Name = name; } private decimal no; [Column(Name="EMPNO")] public decimal No { get { return no; } set { no = value; IsModified = true; } } private string name; [Column(Name="ENAME")] public string Name { get { return name; } set { name = value; IsModified = true; } } #region IModified Members public bool IsModified { get; set; } #endregion } class Program { static void Main(string[] args) { OracleDB db = new OracleDB("Data Source=orcl;User Id=scott;Password=tiger"); var Employees = db.Employees; var q = from e in Employees where e.No > 7500 select e; foreach (var e in q) Console.WriteLine("{0}, {1}", e.No, e.Name); } } } /* 結果 7521, WARD 7566, JONES 7654, MARTIN 7698, BLAKE 7782, CLARK 7788, SCOTT 7839, KING 7844, TURNER 7876, ADAMS 7900, JAMES 7902, FORD 7934, MILLER */
という訳で検索ができました。更新系は、また別の機会に。
自分用メモ。
http://www.microsoft.com/japan/msdn/net/bb425822.aspx