ODP.NET 11.2.0.3.0以上には、ADO.NET Entity FrameworkおよびLINQ to Entitiesのサポートが含まれています。ODP.NETでは、Entity SQLもサポートされています。
Entity Frameworkは、データ・モデルでのオブジェクト・リレーショナル・マッピング・サービスを提供するフレームワークです。Entity Frameworkでは、リレーショナル・データベース形式とクライアント優先オブジェクト形式とのインピーダンス・ミスマッチが解決されます。統合言語クエリ(LINQ)は、配列データ、可算クラス、XML、リレーショナル・データベースおよびその他のデータ・ソースのクエリ、計画およびフィルタ処理に使用される一連の演算子を定義します。LINQの1つの形式であるLINQ to Entitiesを使用すると、Entity Frameworkデータ・ソースをクエリできます。ODP.NETでは、オブジェクト・リレーショナル・モデリングおよびLINQ to EntitiesクエリでOracle Databaseを使用できるようEntity Frameworkがサポートされています。
Entity FrameworkおよびLINQを使用すると、.NET開発者の生産性が向上します。ここでは、アプリケーションのデータ・モデルからデータベースのデータ・モデルが抽出されます。Entity Frameworkのツールを使用すると、オブジェクト・リレーショナル・データの処理が容易になります。Oracle .NET開発者は、Entity FrameworkおよびLINQにOracleを統合することで、生産性に関するこれらのすべての利点を活用できます。
注意:
|
エンティティ・データ・モデルは、Oracle Databaseスキーマから生成できるようになりました。Oracleエンティティ・データ・モデルは、Visual StudioおよびODP.NETを使用してクエリおよび操作できます。Oracleでは、Database FirstおよびModel Firstモデリング・アプローチがサポートされています。Visual StudioのServer Explorerによるデータ接続にフィルタ処理を指定すると、Entity Data Modelウィザードでも、フェッチおよび表示されるOracle Databaseオブジェクトに対してフィルタ処理を行うことができます。
LINQ to Entitiesでは、ODP.NET(LINQ to Entitiesの組込み関数を含む)を使用してOracle Databaseでクエリを実行できます。INSERT
、UPDATE
およびDELETE
は、Oracleストアド・プロシージャまたはObjectContext
SaveChanges
メソッドを使用して実行できます。
ODP.NETでは、Entity Frameworkで実行可能なOracleストアド・プロシージャの関数インポートがサポートされています。Oracle関数インポートは、エンティティ型としてのOracleの暗黙的な結果セットを含め、スカラー型、複合型およびエンティティ型の集合を返すことができます。暗黙的な結果セットのバインドは、Oracle REF CURSOR
によってサポートされています。詳細は、「暗黙的なREF CURSORのバインド」を参照してください。
関連項目: Entity Frameworkと統合言語クエリ(LINQ)の使用方法、およびModel Firstを使用したデータ定義言語(DDL)スクリプトの生成方法に関するチュートリアルは、次を参照してください。 |
ODP.NETのマニフェスト・ファイルには、基本型(VARCHAR2
、Number
など)と、基本型のマップ先であるEntity Data Model(EDM)型(string
、Int32
など)が記述されています。これには、各EDM型のファセットも含まれています。
ODP.NETでは、時間リテラル、および時間型に関する正規関数がサポートされていません。
Oracleでは、NULL
と空文字列の両方が、同様にNULL
文字列であると判断されます。これらの文字列に対して操作(Equals()、Length()
、Trim()
など)を実行すると、NULL
文字列が返されます。
表3-4に、Oracleデータ型と対応するEDM型のマッピングを示します。表には、各Oracleデータ型に関連付けられるプロバイダ型の属性およびEDM型のファセットの詳細も含まれています。
表3-4 Oracleデータ型とEDM型のマッピング
Oracleデータ型 | EDM型(基本型) | プロバイダ型の属性: 名前および値 | EDM型のファセット |
---|---|---|---|
|
|
|
|
(10gで導入) |
|
|
適用不可 |
(10gで導入) |
|
|
適用不可 |
|
|
|
適用不可 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
適用不可 |
|
|
|
Interval Day To SecondのEDM型のファセット |
|
|
|
Interval Year To MonthのEDM型のファセット |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
適用不可 |
適用不可およびサポートされない |
|
|
|
|
適用不可 |
|
|
|
適用不可 |
|
|
|
適用不可 |
(その他すべての場合) |
|
|
|
|
|
|
|
|
適用不可 |
適用不可およびサポートされない |
|
|
|
|
|
|
|
|
適用不可 |
|
適用不可 |
適用不可およびサポートされない |
|
|
|
|
|
|
|
|
適用不可 |
|
|
|
|
|
|
|
Timestamp with Local Time ZoneのEDM型のファセット |
|
|
|
Timestamp with Time ZoneのEDM型のファセット |
(サイズ) |
|
|
|
|
|
|
|
|
適用不可 |
適用不可およびサポートされない |
|
(9iで導入) |
|
|
|
この項では、前述のOracleデータ型に対応するEDM型のファセットを列挙します。
BfileのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483648
|
FixedLength |
DefaultValue
|
False
|
BlobのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483648
|
FixedLength |
DefaultValue
|
False
|
CharのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
Minimum
|
1
|
Unicode |
DefaultValue
|
False
|
FixedLength |
DefaultValue
|
True
|
ClobのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483647
|
Unicode |
DefaultValue
|
False
|
FixedLength |
DefaultValue
|
False
|
DateのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Constant
|
True
|
FloatのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
0
|
Scale |
Minimum
|
0
|
Interval Day To SecondのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
1
|
Scale |
Minimum
|
0
|
注意: EDM型では、TimeSpan がサポートされていません。
合計秒数を表すには、 |
Interval Year To MonthのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
1
|
Scale |
Minimum
|
0
|
LongのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483647
|
Unicode |
DefaultValue
|
False
|
FixedLength |
DefaultValue
|
False
|
Long RawのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483647
|
FixedLength |
DefaultValue
|
False
|
NCharのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
Minimum
|
1
|
Unicode |
DefaultValue
|
True
|
FixedLength |
DefaultValue
|
True
|
注意: NChar では、実際のデータが最大バイト制限の2000の対象となります。
DDLで許可される最大文字数が1000の場合、 |
NClobのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483647
|
Unicode |
DefaultValue
|
True
|
FixedLength |
DefaultValue
|
False
|
NumberのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
1
|
Scale |
Minimum
|
0
|
NVarchar2のEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
Minimum
|
1
|
Unicode |
DefaultValue
|
True
|
FixedLength |
DefaultValue
|
False
|
注意: NVARCHAR2 では、実際のデータが最大バイト制限の4000の対象となります。
DDLで許可される最大文字数が2000の場合、 |
RawのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
Minimum
|
1
|
FixedLength |
DefaultValue
|
False
|
ROWIDのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
18
|
Unicode |
DefaultValue
|
False
|
FixedLength |
DefaultValue
|
True
|
TimestampのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
0
|
Timestamp with Local Time ZoneのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
0
|
Timestamp with Time ZoneのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
Precision |
Minimum
|
0
|
UROWIDのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
4000
|
FixedLength |
DefaultValue
|
True
|
Varchar2のEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
Minimum
|
1
|
Unicode |
DefaultValue
Constant |
False
|
FixedLength |
DefaultValue
|
False
|
XMLTypeのEDM型のファセット
ファセット名 | 属性名 | Value |
---|---|---|
MaxLength |
DefaultValue
|
2147483647
|
Unicode |
DefaultValue
|
True
|
FixedLength |
DefaultValue
|
False
|
.NET構成ファイルでカスタム・マッピングを構成して、Number(p,0)
Oracleデータ型のデフォルト・マッピングを上書きできます。このため、たとえば、デフォルトでInt16
にマップされているNumber(1,0)
を、カスタムで.NET Bool
型または.NET Byte
型にマップできます。
例3-1に、カスタム・マッピングを使用してNumber(1, 0)
Oracleデータ型をbool
EDM型にマップするapp.config
ファイルのサンプルを示します。また、この例では、Number(3,0)
をbyte
にマップし、Int16、Int32
およびInt64
データ型の最大精度をそれぞれ4、9および18に設定します。
例3-1 Number(p,0)データ型をカスタム・マップするアプリケーション構成ファイルのサンプル
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> </connectionStrings> <oracle.dataaccess.client> <settings> <add name="bool" value="edmmapping number(1,0)" /> <add name="byte" value="edmmapping number(3,0)" /> <add name="int16" value="edmmapping number(4,0)" /> <add name="int32" value="edmmapping number(9,0)" /> <add name="int64" value="edmmapping number(18,0)" /> </settings> </oracle.dataaccess.client> </configuration>
例3-1では、マッピングを次のようにカスタマイズしています。
Oracle型 | デフォルトのEDM型 | カスタムのEDM型 |
---|---|---|
Number(1,0) |
Int16 |
bool |
Number(2,0) からNumber(3,0) |
Int16 |
byte |
Number(4,0) |
Int16 |
Int16 |
Number(5,0) |
Int16 |
Int32 |
Number(6,0) からNumber(9,0) |
Int32 |
Int32 |
Number(10,0) |
Int32 |
Int64 |
Number(11,0) からNumber(18,0) |
Int64 |
Int64 |
Number(19,0) |
Int64 |
Decimal |
カスタム・マッピングによって、.NET/EDM型にマップされるOracle Number
型の最大精度が構成されます。このため、たとえば、前述のカスタム・アプリケーション構成ファイルでODP.NETを構成する際は、Int64
にデフォルトの範囲であるNumber(11,0)
からNumber(19,0)
ではなく、Int64
にNumber(10,0)
からNumber(18,0)
をマップするよう構成されます。
注意:
|
マッピングによってデータが.NET/EDM型およびNumber(p, s)
型の範囲内に適合することを確認する必要があります。Oracle Number
データに対して範囲が小さすぎる.NET/EDM型を選択した場合、データの取得時にエラーが発生します。また、.NET/EDM型を選択した場合に、対応するデータがOracle Number
列に対して大きすぎると、Oracle DatabaseにINSERTおよびUPDATEを行った際にエラーが発生します。
.NET構成ファイルのカスタム・マッピングを変更した場合、変更によって発生した比較エラーを解決するには、データ・モデルを再生成します。
場合によっては、カスタム・マッピングを使用するプロジェクトがVisual Studioによってロードされる際に、カスタム・マッピングが原因で比較エラーが発生することがあります。この場合、次の回避策を使用できます。
Visual Studioのヘルプ「About Microsoft Visual Studio」を開きます。「OK」をクリックしてダイアログ・ボックスを終了します。
かわりに、Server Explorerで使用する接続を開きます。
プロジェクトを再コンパイルしてコンパイル・エラーを消去します。
ストアド・プロシージャのマッピングにカスタムINSERT、UPDATE
またはDELETE
ストアド・プロシージャを使用すると、次のエラーが発生する場合があります。
エラー2042: 指定されたパラメータ・マッピングが無効です。
これは、Number
パラメータがBoolean
属性にマップされた場合またはRAW
パラメータがGuid
属性にマップされた場合に発生します。
解決策として、SSDLでストアド・プロシージャのNumber
パラメータにPrecision="1"
を、RAWパラメータにMaxLength="16"
を手動で追加します。