Найти основной размер столбца с помощью метаданных NHibernate - PullRequest
5 голосов
/ 23 декабря 2009

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

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

Ответы [ 2 ]

6 голосов
/ 11 января 2010

См. Код ниже для двух разных способов получения размера столбца для строки из метаданных NHib.

Приветствия
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));
    }
1 голос
/ 24 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...