nhibernate,外键列中的0

nhibernate,外键列中的0,nhibernate,nhibernate-3,Nhibernate,Nhibernate 3,我得到了一个旧数据库,其中在FK列中使用了值0,以指示未指定任何关系 这不是我能以一种微不足道的方式改变的事情。可以告诉NHibernate在指定列中将0视为null吗 编辑 我知道未找到,但我只想忽略那些有0的。有一个类似的问题:。Noel Kennedy提出了一个有趣但有点奇怪的解决方案 我可能会在数据库中存储一条ID为0的记录,它表示一个空对象。此解决方案对我们非常有效: 简而言之: 添加以下类: public class NullableTuplizer : PocoEntityTupl

我得到了一个旧数据库,其中在FK列中使用了值0,以指示未指定任何关系

这不是我能以一种微不足道的方式改变的事情。可以告诉NHibernate在指定列中将0视为null吗

编辑


我知道
未找到
,但我只想忽略那些有0的。

有一个类似的问题:。Noel Kennedy提出了一个有趣但有点奇怪的解决方案


我可能会在数据库中存储一条ID为0的记录,它表示一个空对象。

此解决方案对我们非常有效:

简而言之:

添加以下类:

public class NullableTuplizer : PocoEntityTuplizer
{
    public NullableTuplizer(EntityMetamodel entityMetamodel, PersistentClass mappedEntity)
        : base(entityMetamodel, mappedEntity)
    {
    }

    public override object[] GetPropertyValuesToInsert(
        object entity, IDictionary mergeMap, ISessionImplementor session)
    {
        object[] values = base.GetPropertyValuesToInsert(entity, mergeMap, session);
        //dirty hack 1
        for (int i = 0; i < values.Length; i++)
        {
            if (values[i ] == null && typeof (IEntity).IsAssignableFrom(getters[i ].ReturnType))
            {
                values[i ] = ProxyFactory.GetProxy(0, null);
            }
        }
        return values;
    }

    public override object[] GetPropertyValues(object entity)
    {
        object[] values = base.GetPropertyValues(entity);
        //dirty hack 2
        for (int i = 0; i < values.Length; i++)
        {
            if (values[i ] == null && typeof (IEntity).IsAssignableFrom(getters[i ].ReturnType))
            {
                values[i ] = ProxyFactory.GetProxy(0, null);
            }
        }
        return values;
    }


    public override void SetPropertyValues(object entity, object[] values)
    {
        //dirty hack 3.
        for (int i = 0; i < values.Length; i++)
        {
            if (typeof (IEntity).IsAssignableFrom(getters[i ].ReturnType)
                && ((IEntity) values[i ]).Id == 0)
            {
                values[i ] = null;
            }
        }
        base.SetPropertyValues(entity, values);
    }
}

你能将PK为0的关系添加到FK引用的表中吗?不行。如果没有关系,所有代码都希望模型包含null。
foreach (var persistentClass in configuration.ClassMappings)
{
    persistentClass.AddTuplizer(EntityMode.Poco, typeof(NullableTuplizer).AssemblyQualifiedName);
}