通过 NHibernate 元数据查找基础列大小

发布于 2024-08-15 14:02:29 字数 160 浏览 3 评论 0原文

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

澄清一下,我不想读取 NHibernate 映射文件中指定的长度属性。我想推断实际的数据库列长度。

Is there a way to use SessionFactory.GetClassMetadata(), or any other method you're aware of, to dynamically get the maximum size of a varchar column that underlies an NHibernate class' string property?

To clarify, I'm not looking to read a length attribute that's specified in the NHibernate mapping file. I want to deduce the actual database column length.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

各自安好 2024-08-22 14:02:29

请参阅下面的代码,了解从 NHib 元数据获取字符串的列大小的两种不同方法。

干杯,
贝里尔

    [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));
    }

See the code below for two different ways you can get the column size for a string from NHib metadata.

Cheers,
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));
    }
幽蝶幻影 2024-08-22 14:02:29

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

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

When the Session factory is generated the NH engine does not check (and retrieve) what the underlying database is. For your case either you provide a "rich" mapping to have everything available at runtime, OR make a function that reads the necessary information from the DB (ie select * from sys.columns ..... for sql-server) when you need it.

Mind you that a rich mapping also allows the NH engine to make some automations (like checking if the size of the string passed is larger than the length of the (n)varchar column)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文