2012-01-27 4 views
0

IronPython을 사용하고 EDM 4.1 모델로 대표되는 SQL Server 데이터베이스로로드하는 ETL 프로젝트에 참여했습니다. 일반적으로 문제없이 데이터를로드하고 저장할 수는 있지만 들어오는 데이터에서 문자열 길이가 초과되었습니다. 이 경우 EDM에 대한 최종 .SaveChanges() 호출에서 예외가 발생합니다. 엔티티, 엔티티 클래스 또는 속성이 오류를 던진 것에 대한 예외 정보가 없습니다.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 열거 형에 액세스 할 수 없습니다. 파이썬에는 * 열거 형이 없습니다. 문제입니까? –

+0

죄송합니다, 저는 Python을 모른다. 번호를 전달하여 제대로 작동하는지 확인해보십시오. 다음과 같이 열거 DataSpace 정의된다 DataSpace.OSpace = 0 DataSpace.CSpace = 1 DataSpace.SSpace = 2 DataSpace.OCSpace = 3 DataSpace.CSSpace = 4 – Pawel

+0

I가 시도 할 수있다. 그러나 그 동안 EDM을 관리하는 사람은 내부적으로 처리되는 인스턴스화를 사용하여 메타 데이터를 나에게 노출시키는 메소드를 추가했습니다. –