2012-01-27 10 views
0

IronPythonを使用し、EDM 4.1モデルで表されるSQL ServerデータベースにロードするETLプロジェクトを行っています。私は一般的に問題なくデータをロードして保存することができますが、着信データの文字列の長さオーバーランに悩まされています。これにより、最終的に.SaveChanges() EDMへの呼び出しで例外がスローされます。どのエンティティ、エンティティクラス、またはプロパティがエラーをスローしたかに関する例外の情報は受け取られません。IronPythonとEDMを使用して最大列長を調べる

私は、割り当て時にデータベースのメタデータの列の最大長をチェックするようにコードを変更したいと思います。このメタデータは、エンティティクラスではなく、EDMコンテキストオブジェクトのMetadataWorkspaceを使用して使用できるように見えます。

MetadataWorkspaceに.GetItems()を呼び出すために、私はSystem.Data.Metadata.Edm.Dataspaceから列挙値を提供する必要があります。

.GetItems(System.Data.Metadata.Edm.Dataspace.CSpace) 

残念ながら、私は参照することはできていないようです任意の方法でSystem.Data.Metadata。私はSystem.Dataを越えることができません:

>>> import clr 
>>> clr.AddReference("System.Data") 
>>> import System.Data 
>>> clr.AddReference("System.Data.Metadata") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IOError: System.IO.IOException: Could not add reference to assembly System.Data.Metadata 
    at IronPython.Runtime.ClrModule.AddReference(CodeContext context, String name) 

誰かがIronPythonのEDMメタデータのイントロスペクションを経験していますか?

((IObjectContextAdapter)ctx).ObjectContext.MetadataWorkspace 

CTX:

答えて

1

すること(お持ちでない場合)、次に、このようにObjectContextにドロップダウンあなたはSystem.Data.Entity.dllへの参照を追加する必要がMetadataWorkspaceにアクセスできるようにするにはあなたのDbContext派生クラスです。 また、EF 4.1には、検証機能が実装されています。検証のエラーが発生したエンティティへの参照とプロパティ名を含むすべての詳細を与える必要があるため、例外をスローするかどうかはわかりません。例外がデータベースによってスローされた場合、それは検証がオフになっていることを意味します。それをオンにした場合は、ファセットをチェックし、検証された場合は実行をスローします。ここでは検証の投稿をブログにリンクしている:

http://blogs.msdn.com/b/adonet/archive/2011/05/27/ef-4-1-validation.aspx http://blogs.msdn.com/b/adonet/archive/2010/12/15/ef-feature-ctp5-validation.aspx

+0

ありがとう。 System.Data.Entityへの参照を追加することで、System.Data.Metadata.Edmにインポートできるようになりました。しかし、私はDataspace列挙にアクセスすることはできません。 Pythonに*列挙はありませんが、それは問題ですか? –

+0

申し訳ありませんが、私はPythonを知らないです。あなたは単に番号を渡して、それが動作するかどうかを見てみることができます。以下の通りのDataSpace列挙が定義されている: DataSpace.OSpace = 0 DataSpace.CSpace = 1 DataSpace.SSpace = 2 DataSpace.OCSpace = 3 DataSpace.CSSpace = 4 – Pawel

+0

私はそれを試みることができます。一方、EDMを管理する人には、メタデータを私に公開するメソッドが追加されました。このメソッドは、内部的に処理されるインスタンス化を使用します。 –

関連する問題