NHibernate Fluent 将字符串属性映射到另一个表的列

本文关键字:另一个 映射 Fluent 字符串 属性 NHibernate | 更新日期: 2023-09-27 18:32:44

>我在数据库中有一个表,仅用于保存某些ID的描述:

TABLE SomeClass
- Columns
- ClassTypeID INT CONSTRAINT etc
TABLE SomeClassTypes
- ClassTypeID INT IDENTITY
- Description NVARCHAR

这样做是这样完成的,因此用户可以轻松插入/删除新类型。我想获得所有SomeClass的报告,但我想有一个字符串属性来保存另一个表中的描述:

public class SomeClass
{
    public virtual int SomeClassID { get; set; }
    public virtual int ClassTypeID { get; set; }
    public virtual string DescriptionType { get; set; }
}
public class SomeClassMap : ClassMapping<SomeClass>
{
    public SomeClassMap()
    {
        Table("SomeClassTable");
        Property(p => p.SomeClassID, map => 
        { 
            map.Column("SomeClassID");
            map.Generator(Generators.Identity);
        });
        Property(p => p.ClassTypeID, map => map.Column("ClassTypeID"));
        //Other properties here
        Property(p => p.DescriptionType, ?); //This line
    }
}

我该怎么做?

NHibernate Fluent 将字符串属性映射到另一个表的列

尝试使用连接的表。

public class SomeClassMap : ClassMapping<SomeClass>
{
public SomeClassMap()
{
    Table("SomeClassTable");
    Property(p => p.SomeClassID, map => 
    { 
        map.Column("SomeClassID");
        map.Generator(Generators.Identity);
    });
    Property(p => p.ClassTypeID, map => map.Column("ClassTypeID"));
    //Other properties here
    Join("SomeClassTypes", m => 
        {
            m.KeyColumn("ClassTypeId");
            m.Fetch.Join();
            m.Map(x => x.DescriptionType).Column("Description");
        })
}
}

编辑

如果您使用在 NHibernate 中内置的流畅映射,请尝试以下操作:

public class SomeClassMap : ClassMapping<SomeClass>
{
    public SomeClassMap()
    {
        Table("SomeClassTable");
        Property(p => p.SomeClassID, map => 
        { 
            map.Column("SomeClassID");
            map.Generator(Generators.Identity);
        });
        Property(p => p.ClassTypeID, map => map.Column("ClassTypeID"));
        //Other properties here
        Property(p => p.DescriptionType, ?); //This line
        Join("SomeClassTypes", m => 
            {
                m.Key(k => k.Column("ClassTypeId"));
                m.Fetch(FetchKind.Join);
                m.Property(x => x.DescriptionType).Column("Description");
            });
    }
}