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:
ありがとう。 System.Data.Entityへの参照を追加することで、System.Data.Metadata.Edmにインポートできるようになりました。しかし、私はDataspace列挙にアクセスすることはできません。 Pythonに*列挙はありませんが、それは問題ですか? –
申し訳ありませんが、私はPythonを知らないです。あなたは単に番号を渡して、それが動作するかどうかを見てみることができます。以下の通りのDataSpace列挙が定義されている: DataSpace.OSpace = 0 DataSpace.CSpace = 1 DataSpace.SSpace = 2 DataSpace.OCSpace = 3 DataSpace.CSSpace = 4 – Pawel
私はそれを試みることができます。一方、EDMを管理する人には、メタデータを私に公開するメソッドが追加されました。このメソッドは、内部的に処理されるインスタンス化を使用します。 –