현재 진행중인 프로젝트에서 탭을 사용하고 있습니다. 이 탭에는 내용이 있습니다. 여러 콘텐츠 개체는 탭에있을 수 있습니다. 따라서 우리는 '자동차'탭을 가질 수 있으며, 자동차 탭에는 세단 콘텐츠 개체, SUV 콘텐츠 개체 및 트럭 콘텐츠 개체가 표시 될 수 있습니다. 또한 사용자는 이러한 개체가 더 많거나 적게 포함되도록 지정할 수 있으며 원하는대로 주문할 수 있습니다. 이러한 콘텐츠 객체의 순서를 사용자 지정으로 유지하는 것이 중요합니다. ContentObject 매핑에AsList()를 사용하는 Fluent nHibernate는 SortOrder에 따라 null 객체를 반환합니다.
HasManyToMany(t => t.ContentObjects)
.Table("TabContentObjects")
.ParentKeyColumn("TabID")
.ChildKeyColumn("ContentObjectID")
.AsList(index => index.Column("SortOrder"));
:
탭 매핑에:
이HasManyToMany(c => c.Tabs)
.Table("TabContentObjects")
.ParentKeyColumn("ContentObjectID")
.ChildKeyColumn("TabID")
.Cascade.SaveUpdate()
.AsList(index => index.Column("SortOrder"));
협회 테이블 인 : 여기
내 매핑이TabContentObjectId TABID ContentObjectId SortOrder int not null
콘텐츠 개체를 추가하고 탭 내에 콘텐츠 개체를 다시 정렬 할 수 있으며 모두 정상입니다. nHibernate가 SortOrder 을 적절하게 추가/업데이트하고있다. 문제는 콘텐츠 개체를 삭제하려고 할 때 발생합니다. 이 contentObject에서 탭을 삭제하려고하면 contentObject.Tabs가 이상하게 보입니다. 그것이 유일한, 또는 (SORTORDER = 0) 탭에서 contentObject, 내가 삭제할 수 있습니다 첫 번째 경우
//Need to remove each through the contentObject since it is parent
foreach (Tab tab in deleteContentObject.Tabs)
{
tab.RemoveContentObject(deleteContentObject);
}
//in Tab class
public virtual void RemoveContentObject(TabContentObject item)
{
if (ContentObjects == null) ContentObjects = new List<TabContentObject>();
ContentObjects.Remove(item);
}
: 여기
내가 탭을 삭제하는 데 사용하는 코드입니다. 두 번째 내용 객체 인 경우 contentObject.Tabs는 [0] [null], [1] [Tab]처럼 보입니다. 탭의 네 번째 contentObject 인 경우 contentObject.Tabs는 [0] [null], [1] [null], [2] [null], [3] [Tab]과 같습니다. 따라서 SortOrder 열이 연관 테이블에있는 지에 따라 많은 null 참조가 반환 된 것처럼 보이므로 null 참조로 인해 삭제할 수 없습니다. 이 null이 반환되는 이유를 알 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.