0
我正在制定一個通用的nhibernate方法,它可以確定在運行時給定一個實例化的nhibernate映射對象,如果該對象被「數據庫」中的某個其他對象引用。在nhibernate中,如何確定映射實體是否具有cascade =「all」?
這樣,我就可以允許用戶刪除沒有被引用的對象,並且如果它們是引發錯誤的(還有一些關於有多少東西引用對象的信息)。
雖然其他對象引用了它,但我遇到了一個障礙,當一個實體映射cascade = all時,我希望它們能夠刪除這個東西。
所以,我只需要知道我可以如何使用Nhibernate.MetaData.IClassMetaData來確定'實體類型'或包是cascade = all。看了幾分鐘後我似乎無法找到它。
有什麼想法?
感謝
艾薩克
附:這裏是方法代碼(未完成)。 IDomainObject只是確保傳遞的對象具有int ID屬性。
public int getReferenceCount<T>(T objectToCheck) where T : Interfaces.IDomainObject
{
Type objectType = typeof(T);
string className = objectType.Name;
IDictionary<string, NHibernate.Metadata.IClassMetadata> myDictionary = session.SessionFactory.GetAllClassMetadata();
int referenceCount = 0;
string fullClassName = objectType.FullName;
foreach (var thisClassPair in myDictionary)
{
NHibernate.Metadata.IClassMetadata thisClass = thisClassPair.Value;
for (int i = 0; i < thisClass.PropertyTypes.Length; i++)
{
string propertyName;
if (thisClass.PropertyTypes[i].Name == fullClassName)
{
if (thisClass.PropertyTypes[i] is NHibernate.Type.ManyToOneType || thisClass.PropertyTypes[i] is NHibernate.Type.OneToOneType)
{
propertyName = thisClass.PropertyNames[i];
List<object> results = this.HQLQuery<object>("from " + thisClassPair.Key + " as refClass where refClass."+propertyName+".id = '"+objectToCheck.ID+"'");
}
}
}
}
return 0;
}
你爲什麼不只是讓他們試着刪除對象(INT try塊),如果出現錯誤,他們展示對象引用。保持數據完整性是數據庫的工作,這就是爲什麼需要FK。 – 2011-02-19 06:55:25
我不能因爲刪除的添加到一個事務,然後當他們點擊保存按鈕時放入。通過這種方式,他們不必等到他們保存以找出出錯的地方。 – 2011-11-04 07:07:22