정확한 질문을하고 있는지 확실하지 않으므로 나와 함께하시기 바랍니다! NHibernate 놈의 비트.Fluent NHibernate - HiLo 체계의 PersistenceSpecification
우리는 모든 테이블
public class IdGenerationConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
var where = string.Format("TableKey = '{0}'", instance.EntityType.Name);
instance.GeneratedBy.HiLo("HiloPrimaryKeys", "NextHighValue", "1000", x => x.AddParam("where", where));
}
}
우리는 HiloPrimaryKeys
테이블 및 배포에 실행됩니다 데이터 씨앗을 생성하는 SQL 스크립트를위한 유창함 NH을 사용하여 다음과 같은 ID 생성 방식을 가지고 있습니다. 이것은 잘 작동합니다.
이제 우리의 영속 계층을 검증하기위한 단위 테스트를 작성하려고합니다. 메모리 구성에서 SQLite를 사용하는 것이 이상적입니다.
[SetUp]
public void SetupContext()
{
config = new SQLiteConfiguration()
.InMemory()
.ShowSql()
.Raw("hibernate.generate_statistics", "true");
var nhConfig = Fluently.Configure()
.Database(PersistenceConfigurer)
.Mappings(mappings =>
mappings.FluentMappings.AddFromAssemblyOf<DocumentMap>()
.Conventions.AddFromAssemblyOf<IdGenerationConvention>());
SessionSource = new SessionSource(nhConfig);
Session = SessionSource.CreateSession();
SessionSource.BuildSchema(Session);
}
문제는 내가 그것을 테스트하는 동안 올바른 스키마 및 종자 데이터를 생성하도록 우리의 배포 스크립트에 대한 NHibernate에 얘기하는 방법을 모르는 것입니다 : 이것은 내가 테스트를 위해 NH을 구성하는 방법입니다.
TestCase ... failed:
Execute
NHibernate.Exceptions.GenericADOException:
could not get or update next value[SQL: ]
---> System.Data.SQLite.SQLiteException: SQLite error
no such column: TableKey
그래서 내 공제가 배포 스크립트를 실행하지 않은 것입니다 : 다음과 같은 예외가 발생
[Test]
public void ShouldAddDocumentToDatabaseWithSimpleValues()
{
new PersistenceSpecification<Document>(Session)
.CheckProperty(x => x.CreatedBy, "anonymous")
.CheckProperty(x => x.CreatedOn, new DateTime(1954, 12, 23))
.CheckProperty(x => x.Reference, "anonymous")
.CheckProperty(x => x.IsMigrated, true)
.CheckReference(x => x.DocumentType, documentType)
.VerifyTheMappings();
}
:
내가 할 특정 문제는 다음 PersistenceSpecification
테스트를 실행하는 경우 지속성 스펙을 확인할 때.
이 상황에 대한 기존 솔루션이 있습니까? 내 Google-fu는 나를이 사이트에 버려진 것 같습니다.
그래, 나는 그것을 보았다. 그러나 PersistenceSpecification은 당신이 만들었을지도 모르는 어떤 변경이 아니라 NH에 의해 생성 된 스키마에서 작동하는 것처럼 보인다. –