FK列で0の値が使用されていて、関係が指定されていないことを示す従来のデータベースがあります。nhibernate、0の外部キー列
これは私が簡単に変更できるものではありません。指定されたカラムで0をnullとして扱うようにNHibernateに指示することは可能ですか?
編集
私は約not-found
を知っているが、私はちょうど同様の質問があります0
FK列で0の値が使用されていて、関係が指定されていないことを示す従来のデータベースがあります。nhibernate、0の外部キー列
これは私が簡単に変更できるものではありません。指定されたカラムで0をnullとして扱うようにNHibernateに指示することは可能ですか?
編集
私は約not-found
を知っているが、私はちょうど同様の質問があります0
このソリューションは、私たちのために素晴らしい仕事:要するにhttp://nhibernate.info/blog/2011/01/28/how-to-use-0-instead-of-null-for-foreign-keys.html
:次に
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);
}
}
すべての関連するマッピングのためにそれを登録します:
は以下のクラスを追加
foreach (var persistentClass in configuration.ClassMappings)
{
persistentClass.AddTuplizer(EntityMode.Poco, typeof(NullableTuplizer).AssemblyQualifiedName);
}
あなたが提供したリンクは動作しません.. – jkyadav
を有するものを無視したい:NHibernate Saving 0 to many-to-one column instead of nullが。興味深いが、ノエル・ケネディーによるちょっと変わった解決策がある。
データベースにID 0のレコードが格納されている可能性があります。これはNullオブジェクトを表しています。
関係を追加できますか? 0のPKはFKが参照するテーブルに? – Mark
いいえ、私は傾けません。すべてのコードでは、関係がない場合、モデルにはnullが含まれていると見なされます。 – jgauffin