微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Fluent NHibernate配置以下联接?

如何解决如何使用Fluent NHibernate配置以下联接?

| 这是基于旧系统的。 我有以下表格:
CREATE TABLE a
  id int

CREATE TABLE b
  a_id int,c_id int
  relationshipid int -- must be IN (1,2,3)

CREATE TABLE c
  id int
我想要以下域模型
public class A
{
  public int Id { get; set; }

  public C entityc { get ; set; }
}

public class C
{
  public int Id { get; set; }
}
设置表b的目的是,对于一个特定的已定义的Relationshipid,(一对应该是)一对ID。对于其他关系,通过B的一对一映射不成立。 Relationshipid可以是少量值之一。 如何使用流利的NHIbernate将关系C为1的关系从实体C归入A类? 作为附带的问题,我在这里试图做的事情有名字吗?最初的方法是尝试使用带有Join表的HasOne并过滤结果,但是显然失败很惨。 编辑:阐明了RelationshipID和目的。     

解决方法

我认为最简单的映射方法是使表b成为实体,并对该实体中的A和C都进行引用,并将RelationshipId作为id。因此,您的映射如下所示:
public class A
{
    public int Id { get; set; }

    public IList<B> bEntities { get; set; }
}

public class ClassAMap : ClassMap<A>
{
    public AMap()
    {
        Table(\"A\");
        Id(x => x.Id);

        HasMany(x => x.bEntities)
            .KeyColumns.Add(\"a_id\");
    }
}

public class B
{
    public virtual int RelationshipId { get; set; }
    public virtual A InstanceA { get; set; }
    public virtual C InstanceC { get; set; }
}

public class ClassBMap : ClassMap<B>
{
    public BMap()
    {
        Table(\"B\");
        Id(x => x.RelationshipId,\"relationshipid\");

        References(x => x.InstanceA);
        References(x => x.InstanceC);
    }
}  
编辑: 如果您希望将这些结果筛选为将A实体中B实体的集合仅筛选为与RelationshipId = 1匹配的结果,那么您应该看一下以下文章: 流利的NHibernate并在需要多个联接的查询上过滤一对多关系? 您也可以在A类中执行以下操作:
public class A
{
    public int Id { get; set; }

    public IList<B> bEntities { get; set; }

    public C InstanceC
    {
       get { return bEntities.First<B>(x => x.RelationshipId == 1).InstanceC; }
    }
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?