---
title: "DevExpressにあるXpoのメリットについて | C#もぐもぐ"
description: "C#をもぐもぐしているblog"
url: "https://blog.223n.tech/posts/17/"
---

# DevExpressにあるXpoのメリットについて

2015年11月4日

[C#](https://blog.223n.tech/tags/C%23/) [DevExpress](https://blog.223n.tech/tags/DevExpress/) [XPO](https://blog.223n.tech/tags/XPO/) [Program](https://blog.223n.tech/tags/Program/)

DevExpress社が提供しているDevExpressに含まれるXPOというDataSetのデザイナーのようなものでデータ構造を作成できる仕組みについてのメモ書きです。

XPOでは、接続情報を渡すだけで、データベースの構築を自動で行ってくれます。

社内では、ドメインモデルからデータの関係性をそのままXPOのデザイナーに落とし込むことで、見たままのデータベースを構築することができるため、重宝しています。

まずは、そんなXPOについてのメモ書きです。

- プログラム言語（VB.NET/C#）で使う型を指定するだけで、XPOが自動的に接続先のDBの型に変換してくれる。

Ex.String型やDateTime型を適切に変換してくれる

- SQLを書かなくても条件や並び替えを簡単に指定できる

Ex.「`[年齢] < 35 AND [所属部門.部門名] LIKE '\*総務\*'`」みたいな感じに条件文を設定可能

Ex.SQL ServerとOracle間での構文の違いによるエラーの心配が不要

- Linqでも簡単にデータの取得が可能。

Ex. 接続情報を持っているSession内のQueryメソッドからLinqの利用が可能

- デザイナーで作成後にXPObjectを継承したクラスが自動生成されるため、読み取り専用のプロパティやメソッドの定義を各XPObjectごとに定義することができる。

Ex. 入力チェックなど、アプリに関係なく共通して実行する処理や、定義しなければならないものを1箇所にまとめることができる。

- Enum型などの独自の定義型も型指定することができる

Ex. 性別、ステータスなど

Ex.Enum型の場合、DBでは整数として保存され、XPObjectではEnum型として扱われる

- 型に他のXPObject(データの固まり、Entity)を指定することができる。

Ex. 社員（XPObject）に、フィールド:所属部門/型:部門（XPObject）を持たせる。

Ex. プログラム上では、「`社員.所属部門.所属名`」といった形で簡単にアクセスすることができる。

Ex. DBでは、それぞれのXPObjectの主キーであるOid（Int型）が保存されている。

- XPObject同士を1:nやn:nを紐付けることで、XPCollectionという配列を作成してくれる。

Ex.「`社員(n) → 部門(1)`」の場合、部門（XPObject）に社員リスト（XPCollection）が生成される。

※この記事は、後から追記していくと思います。

[記事一覧に戻る](https://blog.223n.tech/posts/)
