관계가 지정되지 않았 음을 나타 내기 위해 0 값이 FK 열에서 사용되는 레거시 데이터베이스가 있습니다.nhibernate, 외래 키 열에서 0
이것은 사소한 방식으로 변경할 수있는 것이 아닙니다. NHibernate에게 0을 지정된 열에서 null로 처리하도록 할 수 있습니까?
편집
이 나는 약 not-found
알고 있지만 난 그냥 0
관계가 지정되지 않았 음을 나타 내기 위해 0 값이 FK 열에서 사용되는 레거시 데이터베이스가 있습니다.nhibernate, 외래 키 열에서 0
이것은 사소한 방식으로 변경할 수있는 것이 아닙니다. NHibernate에게 0을 지정된 열에서 null로 처리하도록 할 수 있습니까?
편집
이 나는 약 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합니다. 노엘 케네디 (Noel Kennedy)가 흥미롭지 만 조금 이상한 해결책이 있습니다.
아마도 데이터베이스에 ID가 0 인 레코드를 저장할 것입니다.이 레코드는 Null 개체를 나타냅니다.
관계를 추가 할 수 있습니까? 0 PK는 FK가 참조하는 테이블에? – Mark
아니요. 모든 코드는 관계가 없으면 모델에 null이 포함될 것으로 기대합니다. – jgauffin