2

我正在尝试映射两个表:

  • 第一个有一个 id (idA) 和一个带有另一个表的 id (idB) 的字段。
    • 另一个具有基于前一个 id (idB) 和另一个 (idB2) 的复合键

这个想法是第二个表包含对多行拆分的描述。

我当前的实现如下,但我无法检索连接所需的 partialDescription。我应该如何改变我的映射工作?有任何想法吗?:)

public class A
{
    long idA
    lond idB
    string fullDescription
}


public class B
{
    long idB
    long idB2
    strind partialDescription
}   

public class AMap : ClassMap<A>
{
    public AMap()
    {
        Table("A");
        Id(x => x.id).Column("idA").GeneratedBy.Native();
        Map(x => x.idB).Column("idB")
        HasMany(x => x.B).KeyColumn("idB").Inverse().Cascade.All().Not.LazyLoad();
    }
}

 public class BMap : ClassMap<B>
{
    public BMap()
    {
        Table("B");
        CompositeId()
            .KeyReference(x => x.A, "idB")
            .KeyProperty(x => x.idB2, "idB2");
        Map(x => x.partialDescription, "desc").CustomType("AnsiString");
    }
}
4

1 回答 1

1

实际上,根据您的描述,您必须有另一种情况:

public class A
{   
    public virtual long Id { get; set; }
    public virtual IList<B> PartialDescriptions { get; protected set; }
    public string fullDescription
    {
        get
        {
            StringBuilder description = new StringBuilder();
            foreach (var partial in PartialDescriptions)
            {
                description.Append(partial);
            }

            return description.ToString();
        }
    }
}

public class B
{
    public virtual long Id { get; set; }
    public virtual long Id2 { get; set; }
    public virtual string Description { get; set; }
}

然后,尝试像这样实现您的类映射:

public class BMap : ClassMap<B>
{
    public BMap()
    {
        Table("B");
        CompositeId()
            .KeyReference(x => x.Id, "idB")
            .KeyProperty(x => x.Id2, "idB2");
        Map(x => x.partialDescription, "desc").CustomType("AnsiString");
    }
}

public class AMap : ClassMap<A>
{
    public AMap()
    {
        Table("A");
        Id(x => x.Dd).Column("idA").GeneratedBy.Native();
        HasMany(x => x.PartialDescriptions)
            .KeyColumn("idB")
            .Inverse()
            .Cascade.All()
            .Not.LazyLoad();
    }
}

注意:我没有尝试编译此代码。我只指望你能拿下将军。

我建议您查看Fluent NHibernate 的入门部分以获取更多信息。

于 2013-04-11T20:10:45.493 回答