3

新しいLoquaciousAPIを使用して文字列プロパティを持つエンティティをNHibernate3のvarchar列にマップしようとしていますが、使用するタイプを指定する方法がわかりません。NHibernate2と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の構築時に、コードに対するクエリは「nvarchar」ではなく「varchar」としてパラメータ化されます)?

SQLServer2008を使用しています。

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タイプを直接指定することは、ここでは必要のないハックと見なす必要があります。このソリューションを使用して、map.Type(NHibernateUtil.AnsiString);NHibernateにSQLタイプを推測させることをお勧めします。

于 2014-01-12T16:58:42.170 に答える