Nhibernate Interceptor - 读取字符串属性

时间:2016-11-15 02:11:00

标签: c# nhibernate fluent-nhibernate

我有简单的拦截器OnSave(),我试图为字符串属性获取SQL长度,例如:

public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)
{
    for (int i = 0; i < propertyNames.Length; i++)
    {
        //If type is string
        var stringType = types[i] as NHibernate.Type.StringType;

        if(stringType != null)
        {
             //Get SQL length of string property   
             var length = stringType.SqlType.Length;
        }
    }

    return false;
}

我前几天已经问过这个问题here,我从中获得了帮助,从上面编写代码并阅读SQL长度。

现在我有一个问题。据我所知,这个长度并不代表DB中的实际长度,它表示Nhibernate映射中设置的属性长度,对我来说没问题。

所以如果我在映射中有这个:

mapping.Map(x => x.Name).Length(600);

在数据库中,这会转换为长度为TEXT

65,535字段

但上面的代码将从映射返回长度:

var length = stringType.SqlType.Length; == (600)

如果没有在映射中设置属性长度,那么在DB中它会转换为VARCHAR(100)并且在拦截器中使用上面的代码我得到了正确length = 100

问题是如果我在映射集CustomSqlType("longtext")中将属性转换为DB中的LONGTEXT:

mapping.Map(x => x.Content).CustomSqlType("longtext");

这会将DB中的属性Content转换为LONGTEXT,但是在上面代码的拦截器中,我仍然会获得该属性的length = 100,就像任何未明确设置长度的其他属性一样映射。

我的问题是:有没有办法在Nhibernate Interceptor中读取真正的DB属性长度。

如果不是,那么有没有办法在Interceptor中读取CustomSqlType属性。 阅读上面例子中的属性长度对我来说没问题,只要我能够阅读CustomSqlType为映射中的属性设置并读取CustomSqlType

0 个答案:

没有答案