2009-11-05 2 views
5

현재 SQL Server 및 Oracle에서 실행되는 회사의 응용 프로그램을 ASP NET MVC 및 Entity Framework로 마이그레이션하여 지속성을 향상시키고 있습니다.Entity Framework - 십진수 매핑 문제 (13,0)

SQL Server 데이터베이스를 기반으로하는 내 엔터티 모델 만들기 e 별도로 Oracle 용 SSDL을 만듭니다 (Oracle 용 Oracle 용 DevArt dotConnect 사용). 일부 문제가 발생합니다.

SQL Server에있는 내 테이블 기본 키의 형식은 decimal (13,0)이며 Oracle의 번호는 (13,0)이지만 Oracle은 Int64 및 SQL Server의 형식을 십진수로 매핑하지만 SQL Server가 필요합니다. Int64에 매핑하십시오.

나는 엔터티 데이터 모델에서 이러한 수정을 수동으로 확인하고 레코드를 만들 것이 잘 작동,하지만 내가 삭제하거나 나는이 오류가있어 일부 레코드를 업데이트해야 할 때

을 지정된 값은 '형식의 인스턴스가 아닌 Edm.Decimal ' 매개 변수 이름 : 값 나를 도울 수

at System.Data.Common.CommandTrees.DbConstantExpression..ctor(DbCommandTree commandTree, Object value, TypeUsage constantType)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateValueExpression(DbCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateEqualityExpression(DbModificationCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbModificationCommandTree commandTree, PropagatorResult referenceRow, PropagatorResult current, TableChangeProcessor processor, Boolean& rowMustBeTouched)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildDeleteCommand(PropagatorResult oldRow, TableChangeProcessor processor)
at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)

누군가?

왜 Entity Framework 매핑이 고정되어 있습니까? 더 유연해질 수 있을까요?

Ps .: 내가 가진 오류는 그것이 협회 때문인 것으로 생각됩니다.

나는 Province라는 엔터티와 다른 하나의 Country를 가지고 있는데,이 엔터티 간의 연관성으로 인해 업데이트 및 삭제시 문제가 발생한다고 생각합니다.

감사합니다,

더글라스 Aguiar

답변

2

이것은 또는 도움이되지 않을 수도 있습니다,하지만 난이 같은 일을에서 같은 오류가 있었다. 그래서 Conceptual 모델을 편집하고 기본 키 필드를 Int32에서 Decimal로 변경했습니다. 지금까지 고정 된 것으로 보인다. 나는 여전히 Sql Server에 대해 다시 테스트 할 필요가있다.

0

질문에 게시 할 때 "지정된 값이 'Edm.Decimal'매개 변수 이름 : value '유형의 인스턴스가 아닙니다. 실제 데이터 형식을 더 잘 반영하기 때문에 Decimal에서 Int32로 기본 데이터 형식을 변경했습니다. 처음이 오류가 발생했을 때 유형 변경 사항을 롤백했는데 여전히 예외가 발생했지만 약간 변경되었지만 추가 파기가 발생했습니다. 결론적으로, 우리 시나리오에서 우리는 Before 지시어를 통해 지속성 동안 PK를 채우기위한 트리거를 기대하고있었습니다. 문제는 EF에 의해 구축 된 도메인 클래스가 PK를 0으로 설정했기 때문에 들어오는 PK가 null이 아니므로 트리거가 실행되지 않았기 때문입니다. 물론 EF는 엔티티 PK가 null을 허용하도록 설정하지 않습니다. 아마 이것은 미래에 다른 사람을 도울 것입니다.