Я делаю общий метод nhibernate, который может определить, с учетом экземпляра сопоставленного объекта nhibernate во время выполнения, если на этот объект ссылается какой-либо другой объект в «базе данных».
Таким образом, я смогу разрешить пользователю удалять объекты, если на них нет ссылок, и выдавать ошибки, если они есть (вместе с некоторой информацией о том, сколько объектов ссылается на объект).
Я наткнулся на загадку, хотя, когда сущность отображается каскадом = все, я хочу, чтобы они могли удалить эту вещь, даже если другие объекты ссылаются на нее.
Итак, мне просто нужно знать, как я могу использовать Nhibernate.MetaData.IClassMetaData, чтобы определить, является ли «тип сущности» или мешок каскадным = все. Кажется, я не могу найти его после нескольких минут поиска.
Есть мысли?
Спасибо
Isaac
P.S. вот код метода (незаконченный). 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;
}