Есть ли способ использовать SessionFactory.GetClassMetadata()
, или любой другой метод Вы знаете, для динамичного получения максимального размера a varchar
столбец, который лежит в основе свойства строки класса NHibernate?
Для разъяснения я не надеюсь читать атрибут длины, это указано в NHibernate отображающийся файл. Я хочу вывести фактическую длину столбца базы данных.
Когда генерируется фабрика сеансов, движок NH не проверяет (и не извлекает), что же такое базовая база данных. В вашем случае, либо вы предоставляете "богатую" связку, чтобы иметь все доступное во время выполнения, либо делаете функцию, которая читает необходимую информацию из БД (т.е. выбирает * из sys.columns ..... для sql-сервера), когда она вам нужна.
Имейте в виду, что богатая связка также позволяет движку NH делать некоторые автоматизации (например, проверять, не превышает ли размер передаваемой строки длину столбца (n)varchar)
.Смотрите код ниже для двух разных способов, вы можете получить размер столбца для строки из NIB-метаданных.
Ура,
Berryl
[Test]
public void StringLength_DefaultIs_50_v1()
{
_metadata = _SessionFactory.GetClassMetadata(typeof(User));
var propertyType = _metadata.GetPropertyType("Email") as StringType;
Assert.That(propertyType.SqlType.Length, Is.EqualTo(50));
}
[Test]
public void StringLength_DefaultIs_50_v2()
{
var mapping = _Cfg.GetClassMapping(typeof(User));
var col = mapping.Table.GetColumn(new Column("Email"));
Assert.That(col.Length, Is.EqualTo(50));
}