ヘッダーをスキップ
Oracle® Data Provider for .NET開発者ガイド
11g リリース2 (11.2.0.4)
B66456-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

ADO.NET Entity FrameworkおよびLINQ to Entities

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を統合することで、生産性に関するこれらのすべての利点を活用できます。


注意:

  • Entity FrameworkおよびLINQ to Entitiesのサポートは、ODP.NET for .NET Framework 4に含まれています。ODP.NET for .NET Framework 2.0では、ADO.NET Entity FrameworkおよびLINQ to Entitiesがサポートされていません。

  • Entity Framework 4.1がサポートされています。ただし、Entity Framework 4.1の機能の一部であるCode Firstは、現在サポートされていません。

  • ODP.NETおよびEntity Frameworkでは、スカラー・パラメータのバインドがサポートされています。Entity Frameworkでは、名前指定によるパラメータのバインドがサポートされています。位置指定によるバインドはサポートされていません。


エンティティ・データ・モデルは、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でクエリを実行できます。INSERTUPDATEおよびDELETEは、Oracleストアド・プロシージャまたはObjectContext SaveChangesメソッドを使用して実行できます。

ODP.NETでは、Entity Frameworkで実行可能なOracleストアド・プロシージャの関数インポートがサポートされています。Oracle関数インポートは、エンティティ型としてのOracleの暗黙的な結果セットを含め、スカラー型、複合型およびエンティティ型の集合を返すことができます。暗黙的な結果セットのバインドは、Oracle REF CURSORによってサポートされています。詳細は、「暗黙的なREF CURSORのバインド」を参照してください。


関連項目:

Entity Frameworkと統合言語クエリ(LINQ)の使用方法、およびModel Firstを使用したデータ定義言語(DDL)スクリプトの生成方法に関するチュートリアルは、次を参照してください。

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/EntityFrameworkOBE/EntityFrameworkOBE.htm


EDM型へのOracleデータ型のマッピング

ODP.NETのマニフェスト・ファイルには、基本型(VARCHAR2Numberなど)と、基本型のマップ先であるEntity Data Model(EDM)型(stringInt32など)が記述されています。これには、各EDM型のファセットも含まれています。

ODP.NETでは、時間リテラル、および時間型に関する正規関数がサポートされていません。

Oracleでは、NULLと空文字列の両方が、同様にNULL文字列であると判断されます。これらの文字列に対して操作(Equals()、Length()Trim()など)を実行すると、NULL文字列が返されます。

表3-4に、Oracleデータ型と対応するEDM型のマッピングを示します。表には、各Oracleデータ型に関連付けられるプロバイダ型の属性およびEDM型のファセットの詳細も含まれています。

表3-4 Oracleデータ型とEDM型のマッピング

Oracleデータ型 EDM型(基本型) プロバイダ型の属性: 名前および値 EDM型のファセット

Bfile

Binary

  • Equal Comparable: False

  • Order Comparable: False

BfileのEDM型のファセット


Binary_Double

(10gで導入)

Double

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Binary_Float

(10gで導入)

Single

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Binary_Integer

Int32

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Blob

Binary

  • Equal Comparable: False

  • Order Comparable: False

BlobのEDM型のファセット


Char

String

  • Equal Comparable: True

  • Order Comparable: True

CharのEDM型のファセット


Clob

String

  • Equal Comparable: False

  • Order Comparable: False

ClobのEDM型のファセット


Date

DateTime

  • Equal Comparable: True

  • Order Comparable: True

DateのEDM型のファセット


Float

Decimal

  • Equal Comparable: True

  • Order Comparable: True

FloatのEDM型のファセット


Int

Int32

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Interval Day To Second

Decimal

  • Equal Comparable: True

  • Order Comparable: True

Interval Day To SecondのEDM型のファセット


Interval Year To Month

Decimal

  • Equal Comparable: True

  • Order Comparable: True

Interval Year To MonthのEDM型のファセット


Long

String

  • Equal Comparable: False

  • Order Comparable: False

LongのEDM型のファセット


Long Raw

Binary

  • Equal Comparable: False

  • Order Comparable: False

Long RawのEDM型のファセット


NChar

String

  • Equal Comparable: True

  • Order Comparable: True

NCharのEDM型のファセット


NClob

String

  • Equal Comparable: False

  • Order Comparable: False

NClobのEDM型のファセット


Nested Table


適用不可

適用不可およびサポートされない

Number(1,0)

Number(2,0)

Number(3,0)

Number(4,0)

Number(5,0)

Int16

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Number(6,0)

Number(7,0)

Number(8,0)

Number(9,0)

Number(10,0)

Int32

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Number(11,0)

Number(12,0)

Number(13,0)

Number(14,0)

Number(15,0)

Number(16,0)

Number(17,0)

Number(18,0)

Number(19,0)

Int64

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Number

(その他すべての場合)

Decimal

  • Equal Comparable: True

  • Order Comparable: True

NumberのEDM型のファセット


NVarchar2

String

  • Equal Comparable: True

  • Order Comparable: True

NVarchar2のEDM型のファセット


Object


適用不可

適用不可およびサポートされない

Raw

Binary

  • Equal Comparable: True

  • Order Comparable: True

RawのEDM型のファセット


Raw(16)

Guid

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Ref


適用不可

適用不可およびサポートされない

ROWID

String

  • Equal Comparable: True

  • Order Comparable: True

ROWIDのEDM型のファセット


Smallint

Int16

  • Equal Comparable: True

  • Order Comparable: True

適用不可

Timestamp

DateTime

  • Equal Comparable: True

  • Order Comparable: True

TimestampのEDM型のファセット


Timestamp with

Local Time Zone

DateTime

  • Equal Comparable: True

  • Order Comparable: True

Timestamp with Local Time ZoneのEDM型のファセット


Timestamp with

Time Zone

DateTimeOffset

  • Equal Comparable: True

  • Order Comparable: True

Timestamp with Time ZoneのEDM型のファセット


UROWID

(サイズ)

Binary

  • Equal Comparable: True

  • Order Comparable: True

UROWIDのEDM型のファセット


Varchar2

String

  • Equal Comparable: True

  • Order Comparable: True

Varchar2のEDM型のファセット


VArray


適用不可

適用不可およびサポートされない

XMLType

(9iで導入)

String

  • Equal Comparable: False

  • Order Comparable: False

XMLTypeのEDM型のファセット



EDM型のファセット

この項では、前述のOracleデータ型に対応するEDM型のファセットを列挙します。

BfileのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483648

True

FixedLength DefaultValue

Constant

False

True


BlobのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483648

True

FixedLength DefaultValue

Constant

False

True


CharのEDM型のファセット 

ファセット名 属性名 Value
MaxLength Minimum

Maximum

DefaultValue

Constant

1

2000

2000

False

Unicode DefaultValue

Constant

False

True

FixedLength DefaultValue

Constant

True

True


ClobのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483647

True

Unicode DefaultValue

Constant

False

True

FixedLength DefaultValue

Constant

False

True


DateのEDM型のファセット 

ファセット名 属性名 Value
Precision Constant

DefaultValue

True

0


FloatのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

0

126

0

False

Scale Minimum

Maximum

DefaultValue

Constant

0

38

0

False


Interval Day To SecondのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

1

251

251

False

Scale Minimum

Maximum

DefaultValue

Constant

0

9

0

False



注意:

EDM型では、TimeSpanがサポートされていません。

合計秒数を表すには、Decimalを使用します。TimeSpanは、TimeSpan.FromSeconds静的メソッドを使用して取得できます。


Interval Year To MonthのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

1

250

250

False

Scale Minimum

Maximum

DefaultValue

Constant

0

9

0

False


LongのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483647

True

Unicode DefaultValue

Constant

False

True

FixedLength DefaultValue

Constant

False

True


Long RawのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483647

True

FixedLength DefaultValue

Constant

False

True


NCharのEDM型のファセット 

ファセット名 属性名 Value
MaxLength Minimum

Maximum

DefaultValue

Constant

1

1000

1000

False

Unicode DefaultValue

Constant

True

True

FixedLength DefaultValue

Constant

True

True



注意:

NCharでは、実際のデータが最大バイト制限の2000の対象となります。

DDLで許可される最大文字数が1000の場合、MaximumおよびDefaultValueの値が1000であると、EDMウィザードにNCHAR(1000)の列が表示されます。


NClobのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483647

True

Unicode DefaultValue

Constant

True

True

FixedLength DefaultValue

Constant

False

True


NumberのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

1

38

38

False

Scale Minimum

Maximum

DefaultValue

Constant

0

38

0

False


NVarchar2のEDM型のファセット 

ファセット名 属性名 Value
MaxLength Minimum

Maximum

DefaultValue

Constant

1

2000

2000

False

Unicode DefaultValue

Constant

True

True

FixedLength DefaultValue

Constant

False

True



注意:

NVARCHAR2では、実際のデータが最大バイト制限の4000の対象となります。

DDLで許可される最大文字数が2000の場合、MaximumおよびDefaultValueの値が2000であると、EDMウィザードにNVARCHAR2(2000)の列が表示されます。


RawのEDM型のファセット 

ファセット名 属性名 Value
MaxLength Minimum

Maximum

Constant

1

2000

False

FixedLength DefaultValue

Constant

False

True


ROWIDのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

18

True

Unicode DefaultValue

Constant

False

True

FixedLength DefaultValue

Constant

True

True


TimestampのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

0

9

6

False


Timestamp with Local Time ZoneのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

0

9

6

False


Timestamp with Time ZoneのEDM型のファセット 

ファセット名 属性名 Value
Precision Minimum

Maximum

DefaultValue

Constant

0

9

6

False


UROWIDのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

4000

True

FixedLength DefaultValue

Constant

True

True


Varchar2のEDM型のファセット 

ファセット名 属性名 Value
MaxLength Minimum

Maximum

DefaultValue

Constant

1

4000

4000

False

Unicode DefaultValue

Constant

False

True

FixedLength DefaultValue

Constant

False

True


XMLTypeのEDM型のファセット 

ファセット名 属性名 Value
MaxLength DefaultValue

Constant

2147483647

True

Unicode DefaultValue

Constant

True

True

FixedLength DefaultValue

Constant

False

True


Oracle Numberデータ型のデフォルト・マッピングおよびカスタマイズ

.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)ではなく、Int64Number(10,0)からNumber(18,0)をマップするよう構成されます。


注意:

  • カスタム・マッピングでは、すべての.NET/EDM型をマップする必要はありません。たとえば、Int16についてのみカスタム・マッピングが必要な場合は、Int16に単一のエントリを行うことができます。他の型には、デフォルト・マッピングが使用されます。

  • Model Firstを使用している場合は、デフォルトでNumber(3,0)Byte属性がマップされます。ただし、Number(3,0)列にモデルが生成されている場合は、Byteにカスタム・マッピングを指定しないかぎり、デフォルトでInt16にマップされます。


マッピングによってデータが.NET/EDM型およびNumber(p, s)型の範囲内に適合することを確認する必要があります。Oracle Numberデータに対して範囲が小さすぎる.NET/EDM型を選択した場合、データの取得時にエラーが発生します。また、.NET/EDM型を選択した場合に、対応するデータがOracle Number列に対して大きすぎると、Oracle DatabaseにINSERTおよびUPDATEを行った際にエラーが発生します。

カスタム・マッピングの使用時の比較エラーの解決

.NET構成ファイルのカスタム・マッピングを変更した場合、変更によって発生した比較エラーを解決するには、データ・モデルを再生成します。

場合によっては、カスタム・マッピングを使用するプロジェクトがVisual Studioによってロードされる際に、カスタム・マッピングが原因で比較エラーが発生することがあります。この場合、次の回避策を使用できます。

  1. Visual Studioのヘルプ「About Microsoft Visual Studio」を開きます。「OK」をクリックしてダイアログ・ボックスを終了します。

    かわりに、Server Explorerで使用する接続を開きます。

  2. プロジェクトを再コンパイルしてコンパイル・エラーを消去します。

カスタムINSERT、UPDATEおよびDELETEストアド・プロシージャでのブール・パラメータおよびguidパラメータのマッピング

ストアド・プロシージャのマッピングにカスタムINSERT、UPDATEまたはDELETEストアド・プロシージャを使用すると、次のエラーが発生する場合があります。

エラー2042: 指定されたパラメータ・マッピングが無効です。

これは、NumberパラメータがBoolean属性にマップされた場合またはRAWパラメータがGuid属性にマップされた場合に発生します。

解決策として、SSDLでストアド・プロシージャのNumberパラメータにPrecision="1"を、RAWパラメータにMaxLength="16"を手動で追加します。