Найдите базовый размер столбца через метаданные NHibernate

Есть ли способ использовать SessionFactory.GetClassMetadata(), или любой другой метод Вы знаете, для динамичного получения максимального размера a varchar столбец, который лежит в основе свойства строки класса NHibernate?

Для разъяснения я не надеюсь читать атрибут длины, это указано в NHibernate отображающийся файл. Я хочу вывести фактическую длину столбца базы данных.

5
задан Bakuriu 25 April 2014 в 11:14
поделиться

2 ответа

Когда генерируется фабрика сеансов, движок NH не проверяет (и не извлекает), что же такое базовая база данных. В вашем случае, либо вы предоставляете "богатую" связку, чтобы иметь все доступное во время выполнения, либо делаете функцию, которая читает необходимую информацию из БД (т.е. выбирает * из sys.columns ..... для sql-сервера), когда она вам нужна.

Имейте в виду, что богатая связка также позволяет движку NH делать некоторые автоматизации (например, проверять, не превышает ли размер передаваемой строки длину столбца (n)varchar)

.
1
ответ дан 14 December 2019 в 08:52
поделиться

Смотрите код ниже для двух разных способов, вы можете получить размер столбца для строки из 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));
    }
6
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: