S#arp-architecture,NHibernate具有类型id的多个数据库

时间:2010-08-02 18:34:58

标签: nhibernate fluent-nhibernate s#arp-architecture

我的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实体,它们以相同的方式映射(没有会话工厂属性)并且工作正常。我似乎无法弄清楚这一点。

2 个答案:

答案 0 :(得分:0)

我认为这是因为HiLo生成器只能使用整数类型 - 所以如果指定的ID是字符串类型,则需要一些其他方法来生成标识。

答案 1 :(得分:0)

HiLo是一种必须分配Id的生成器策略,如果您自己分配它,则需要使用Assigned策略。

Sharp Arch,带有一组默认的fluentNh自动化,我猜你需要检查一下自动加载自动化的bootstrapper代码,然后调整它们或在那里覆盖它们。如果您仍有问题,请告诉我,我很乐意看看您的代码。