3

我正在尝试使用新的 Loquacious API 将具有字符串属性的实体映射到 NHibernate 3 中的varchar列,但我不知道如何指定要使用的类型。我能够使用 NHibernate 2 和 FluentNHibernate 正确映射实体。

NHibernate 2 w/Fluent 映射

public class EntityMapping : ClassMap<Entity>
{
    public EntityMapping()
    {
        Table("EntityTable");
        Id(x => x.EntityId).Column("EntityId").GeneratedBy.Identity();
        Map(x=>x.Code).Not.Nullable().Column("EntityCode").CustomType("AnsiString");

    }
}

NHibernate 3 w/loquacious API

 public Action<IClassMapper<Entity>> CreateMapping()
    {
        return ca =>
        {
            ca.Table("Entity");
            ca.Id(x => x.EntityId, map =>
            {
                map.Column("EntityId");
                map.Generator(Generators.Identity);
            });
            ca.Property(x => x.Code, map =>
            {
                map.Column(cm => {
                    cm.Name("EnityCode"); 

                    cm.NotNullable(true);
                }); 

            });
        };

我如何/在哪里指定“AnsiString”(因此在构造 SQL 时,对代码的查询被参数化为“varchar”而不是“nvarchar”)?

我正在使用 Sql Server 2008。

4

2 回答 2

4
ca.Property(x => x.Code, map =>
{
    map.Type(NHibernateUtil.AnsiString);
    map.Column(/*etc.*/); 
});
于 2011-09-14T19:28:41.637 回答
0

对问题本身(“指定 sql 类型”)的回答是定义如下属性:

ca.Property(x => x.Code, map =>
        {
            map.Column(cm => {
                cm.Name("EnityCode"); 
                cm.NotNullable(true);
                cm.SqlType("varchar");
            }); 
        });

直接指定 SQL 类型应该被认为是一种 hack,但这里没有必要。最好使用该map.Type(NHibernateUtil.AnsiString);解决方案并让 NHibernate 推断 SQL 类型。

于 2014-01-12T16:58:42.170 回答