在s#arparch项目中测试多个数据库的最佳方法是什么?
MappingIntegrationTests中的当前SetUp()代码尝试针对第一个数据库测试每个程序集。
string [] mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
configuration = NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies,
new AutoPersistenceModelGenerator().Generate(),
"../../../../app/Humanities.IBusiness.Web/NHibernate.config");
是否有人设法根据相应的数据库架构正确测试每个映射?
答案 0 :(得分:3)
在设置中,我添加以下内容:
private List<string> sessionKeys;
[SetUp]
public virtual void SetUp()
{
string[] mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
configuration = NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies,
new AutoPersistenceModelGenerator().Generate(),
"../../../../app/Humanities.IBusiness.Web/NHibernate.config");
/*NEW CODE */
var configuration2 = NHibernateSession.AddConfiguration(DataGlobals.ROLES_DB_FACTORY_KEY,
mappingAssemblies,
new AutoPersistenceModelGenerator().Generate(),
"../../../../app/Humanities.IBusiness.Web/NHibernateForRolesDb.config",null,null, null);
sessionKeys = new List<string>();
sessionKeys.Add(DataGlobals.DEFAULT_DB_KEY);
sessionKeys.Add(DataGlobals.ROLES_DB_FACTORY_KEY);
然后在CanConfirmDatabaseMatchesMappings
中foreach (var entry in allClassMetadata)
{
bool found = false;
foreach (string key in sessionKeys)
{
ISession session = NHibernateSession.CurrentFor(key);
try
{
session.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco))
.SetMaxResults(0).List();
found = true;
}
catch (Exception ex) { }
}
if (found == false)
throw new MappingException("Mapping not found for " + entry.Key.ToString());
}
不确定这是否是一个完整的答案,但总比没有好。)
有什么想法吗?
答案 1 :(得分:1)
的Al, 说实话,我不知道用户使用多个数据库的程度。这是我认为在项目生命周期开始时游说的一些非常有声音的人。这是我要向社区提出的问题,看起来是时候问这个问题了。
您可能需要做的是将设置代码移动到单独的方法中。虽然我并没有因为打破DRY校长而疯狂,但在这种情况下似乎是必需的。
艾力