저는 기존의 기능적 응용 프로그램에있는 많은 NHibernate 매핑을 상속 받았습니다. 몇 가지 새로운 기능을 개발하기 위해이 응용 프로그램을 분기했습니다. 그러는 동안 TDD와 비슷한 접근 방식을 허용하도록 테스트 인프라를 확장했습니다. 하지만 이제는 통합 테스트 중 하나에서 벽에 부딪 혔습니다 ...레거시 매핑에서 NHibernate 매핑 오류가 발생했습니다.
통합 테스트를하기 전에 테스트 데이터가있는 클래스가 있습니다. 이들을 삽입하는 메소드에서 다음 예외가 발생합니다.
NHibernate.PropertyAccessException : 유효하지 않은 캐스트 (등록 정보 유형 불일치에 대한 맵핑 점검); Setter of Domain.Entities.Project ---> System.InvalidCastException : 형식 'System.Object'형식의 개체를 'Domain.Entities.ProjectModules'형식으로 캐스팅 할 수 없습니다.
나는 이유를 알 수 없습니다. 내가 설정에 대한 데이터베이스에 유지하려고 두 Project
경우, 모두 다음과 같이 정의되어 있습니다
new Project("2023", "projeName", "projaddr")
{
PrincipalOwner = UserOne, // UserOne and Office are other properties
Office = Office,
// I've tried just not instantiating this too - gave the same exception
ProjectModules = new ProjectModules
{
HasModuleOne = false,
HasModuleTwo = false
});
});
:
Component(m => m.ProjectModules, c =>
{
c.LazyLoad();
c.Map(x => x.HasModuleOne)
.Column("ModuleOne").Not.Nullable().Default("0");
c.Map(x => x.HasModuleTwo)
.Column("ModuleTwo").Not.Nullable().Default("0");
});
호기심이 많았지 만 추가 한 새로운 매핑입니까, 아니면 Fluent NH의 새 버전에서 작동하지 않는 이전 매핑 이었습니까? 아니면 전혀 작동하지 않는 오래된 코드입니까? –
@Cole :이 매핑은 오래되었지만 FNH의 버전이나 버전을 변경하지 않았습니다. 빌드하려고하는 것과 같은 통합 테스트가 실행 된 적이 없다고 생각합니다. 이전 클래스를 사용하여 새 테스트 데이터를 만들었습니다. 그러나 이러한 매핑은 FNH의 동일한 버전과 함께 사용자가 불평하지 않는 프로덕션 환경에서 사용됩니다. P –
Nice! 그런 말로 사용자들은 생산에 새로운 프로젝트를 만든다는 말이 맞습니까? 그렇다면 개체를 만드는 방법에 차이가 있습니까? 제작 과정에서 이러한 객체를 만들지 않는 한 통합 테스트가 다른 이유는 없습니다. 그 차이가 다른 경우 아마 당신을 답으로 인도하는 데 도움이 될 것입니다. –