通过NHibernate元数据查找底层列大小

Cal*_*yen 5 size nhibernate metadata

有没有办法使用SessionFactory.GetClassMetadata()或者您知道的任何其他方法动态获取varchar作为NHibernate类的字符串属性基础的列的最大大小?

为了澄清,我不打算读取NHibernate映射文件中指定的长度属性.我想推断出实际的数据库列长度.

Ber*_*ryl 6

请参阅下面的代码,了解从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));
    }
Run Code Online (Sandbox Code Playgroud)


Jag*_*uar 1

当生成会话工厂时,NH 引擎不会检查(并检索)底层数据库是什么。对于您的情况,您可以提供一个“丰富”的映射,以便在运行时提供所有可用的内容,或者创建一个函数,当您需要它。

请注意,丰富的映射还允许 NH 引擎进行一些自动化(例如检查传递的字符串的大小是否大于 (n)varchar 列的长度)