我的SharpArchitecture项目中有多个数据库,并遵循此处列出的指南:
http://wiki.sharparchitecture.net/FAQ.ashx
除了我的指定ID的实体外,一切正常。尝试启动应用程序时,我得到了“已配置数据库”。通过一些挖掘我得到:
“身份类型必须是整数(int,long,uint,ulong)”
public void Apply(FluentNHibernate.Conventions.Instances.IIdentityInstance instance)
{
instance.Column("Id");
instance.UnsavedValue("0");
instance.GeneratedBy.HiLo("1000");
}
这是在instance.GeneratedBy.HiLo("1000")
期间抛出的;这很奇怪,因为我的映射是指定的id和字符串。它似乎忽略了我指定的id地图:
[SessionFactory(DataGlobals.SecondDbFactoryKey)]
public class SecondDbEntityMap: IAutoMappingOverride<SecondDbEntity>
{
public void Override(AutoMapping<SecondDbEntity> mapping) {
mapping.Id(x => x.AssignedIdProperty).GeneratedBy.Assigned();
}
}
该映射应该有效,对吗?我在我的第一个数据库中有几个已分配的id实体,它们以相同的方式映射(没有会话工厂属性)并且工作正常。我似乎无法弄清楚这一点。
答案 0 :(得分:0)
我认为这是因为HiLo生成器只能使用整数类型 - 所以如果指定的ID是字符串类型,则需要一些其他方法来生成标识。
答案 1 :(得分:0)
HiLo是一种必须分配Id的生成器策略,如果您自己分配它,则需要使用Assigned策略。
Sharp Arch,带有一组默认的fluentNh自动化,我猜你需要检查一下自动加载自动化的bootstrapper代码,然后调整它们或在那里覆盖它们。如果您仍有问题,请告诉我,我很乐意看看您的代码。