로 기존 테이블 주위 어색 값을 근무하고 내가 존재하지 않는 무언가를 표현하기 위해 0
대신 NULL
의 값을 사용하는 기존 테이블에 참여하기 위해 노력하고있어.난 그냥 NHibernate에 함께 시작 해요 NHibernate에
데이터베이스에 id가 0
인 행이 있습니다.이 행은 단순히 자리 표시 자일뿐입니다.
이 자리 표시자를 검색하는 것을 피하고 대신 내 속성을 null
으로 지정하고 싶습니다.
null
과에
0
의 값을 매핑 처리하는
IUserType
을 시도했지만 I'don't는 대일가 (
.References()
) 매핑 사용자 정의 유형의 작업을 생각합니다.
public class Category
{
public virtual int Id { get; set; }
public virtual string CategoryName { get; set; }
public virtual Category Parent { get; set; }
public virtual IList<Category> Children { get; set; }
public virtual Category RealCategory { get; set; }
public virtual bool IsHomeParent { get; set; }
}
이 매핑은 다음과 같습니다 : 그래서
public class CategoryMapping:ClassMap<Category>
{
public CategoryMapping()
{
Id(x => x.Id);
Map(x => x.CategoryName);
Join("categorymappings",
m =>
{
m.KeyColumn("categoryid");
m.Map(z => z.IsHomeParent);
// need ids of 0 to come up as null for .Parent
m.References(z => z.Parent).Column("parentcategoryid");
m.References(z => z.RealCategory).Column("realcategoryid").Not.LazyLoad();
m.Optional();
});
HasManyToMany(p => p.Children)
.Table("categorymappings")
.ParentKeyColumn("parentcategoryid")
.ChildKeyColumn("categoryid")
.Where("ishomeparent=0")
.Fetch.Join()
.Not.LazyLoad();
Table("categories");
}
}
다시
이
는 클래스입니다.0
의 ID는
null
이되도록
.Parent
을 얻으려고합니다.
관련 참고 사항에서 피할 필요가있는 레거시 데이터베이스의 데이터에 대한 무한 재귀 문제가 있습니다. 카테고리가 최상위 레벨 일 때
는 categoryid
는 매핑 테이블에 parentcategoryid
(예. categoryid=1
, parentcategoryid=1
)와 동일하다.
내게 동일한 개체를 계속 참조하는 .Parent property
이 표시됩니다. (따라서 .Parent.Parent.Parent.Parent.etc
은 같은 객체 임).
NHibernate는 결국 포기할 정도로 영리한 것처럼 보이지만 상당히 느려지고 있습니다.
따라서, 이상적으로 매핑하는 방식으로 정의되어야 그 중 하나 parentcategoryid=categoryid
또는 parentcategoryid=0
경우 .Parent
열이 무시됩니다 (null
로 설정)합니다.
Fluent 매핑을 통해이 작업을 수행 할 수 있습니까?
이것은 작동하는 것 같습니다. setter에서도 0 문제를 처리 할 수있는 것처럼 보입니다. 그래도 NHibernate를 저장하는 것을 혼란스럽게할지 모르겠다. 나는 그것을 시험해야 할 것이다. – andreialecu