2012-02-28 3 views
1

У меня есть существующее приложение NHibernate, которое было создано в .NET 2, это приложение WinForms, которое имеет отдельную DLL, скомпилированную для классов данных & все файлы hbm.xml.NHibernate доступ к настройкам поля hbm.xml

Что я хочу сделать сейчас, это показать в форме, поля которой не могут быть нулевыми, изменив границу на красный.

Проблема: я не могу найти нигде, где я могу циклически пересекать связанные поля (что я могу делать) в форме и читать параметр not-null = "false" (или true).

Любые мысли?

Я открыт для Fluent NHibernate, однако это приложение VB.NET, и я нуб свободного Nhibernate :-)

Также открыт для других способов сделать это, до тех пор, как я могу сделать их вписываются в приложение достаточно хорошо :-)

Спасибо!

ответ

2

Вам не нужно читать каталог файлов hbm.XML, так как SessionFactory содержит MetaData относительно всех отображаемых объектов. Одним из способов поиска всех метаданных для объекта является следующее:

После SessionFactory был построен: -

var metaData = SessionFactory.GetClassMetadata(typeof(Model.Entities.Client)); 
for (int i = 0; i < metaData.PropertyNames.Length -1; i++) 
{ 
    System.Diagnostics.Debug.Print(metaData.PropertyNames[i]); 
    System.Diagnostics.Debug.Print(metaData.PropertyNullability[i].ToString()); 
} 

В моем случае я получаю следующее: -

Name 
False 
Address1 
False 
Address2 
True 
... 
Postcode 
True 

Помните FALSE означает не-NULL то есть свойство ожидает запись

Еще один способ добавить DataAnnotations в список ваших моделей.

[Required(ErrorMessage = "You must supply a postcode")] 
public virtual string Postcode { get; set; } 

В Интернете есть хорошие статьи, чтобы показать вам, как использовать это в проекте winforms.

+0

Спасибо, что сработало отлично. Для тех, у которых есть потребность в VB.NET, вот эквивалент: 'Dim метаданные NHibernate.Metadata.IClassMetadata Dim tObjType Как System.Type Dim я As Integer tObjType = Model.Entities.Client.GetType() Metadata = classGlobal.tFactory.GetClassMetadata (tObjType) При г = 0 до metaData.PropertyNames.Length System.Diagnostics.Debug.Print (metaData.PropertyNames (I)) System.Diagnostics.Debug.Print (metaData.PropertyNullability (i) .ToString()) Next' Просим прощения за форматирование! – Dominik

Смежные вопросы