c# - NHibernate:在不使用第二个类的情况下映射一对多关系以填充集合

标签 c# nhibernate orm mapping nhibernate-mapping

我试图用 NHibernate 映射的数据库有一个计划表和一个日期表。一个计划可以与多个日期相关联,这是由具有 PLAN_ID 外键列的日期表建模的。

这些是我当前的类和映射:

public class Plan
{
    public virtual int Id { get; set; }
    public virtual IList<PlanDate> Dates { get; set; }
}

public class PlanDate
{
    public virtual int Id { get; set; }

    public virtual int PlanId { get; set; }

    public virtual DateTime? Date { get; set; }
}

  <class name="Plan" table="PLAN">
    <id name="Id" unsaved-value="0">
      <column name="ID" not-null="true" />
      <generator class="native"/>
    </id>
    <bag name="Dates">
      <key column="PLAN_ID" />
      <one-to-many class="PlanDate" />
    </bag>
  </class>
  <class name="PlanDate" table="PLAN_DATE">
    <id name="Id" unsaved-value="0">
      <column name="ID" not-null="true" />
      <generator class="native"/>
    </id>
    <property name="Date" column="DATE" type="DateTime"/>
    <property name="PlanId" column="PLAN_ID" type="integer"/>
  </class>

这会使用 PlanDate 对象正确填充 Plan 对象中的 Dates 集合。但是,理想情况下,我希望在 Plan 类中有一组 DateTime 对象。除了包含日期之外,我没有使用 PlanDate 类,而且我不打算更新数据库中的数据。示例:

public class Plan
{
    public virtual int Id { get; set; }
    public virtual IList<DateTime> Dates { get; set; }
}

有什么方法可以映射到这个类结构,并摆脱 PlanDate 类吗?

最佳答案

你可以使用这个映射:

<list name="Dates" table="PlanDates">
    <key column="PlanId"/>
    <index column="Position" />
    <element column="Value" type="System.DateTime"/>
</list>

xml 节点 <index column="Position" />引用列表中元素的位置。

你的类(class)将完全按照你想要的方式进行:

public class Plan
{
    public Plan()
    {
        this.Dates = new List<DateTime>();
    }
    public virtual int Id { get; set; }
    public virtual IList<DateTime> Dates { get; set; }
}

您可以找到更多信息 here .

关于c# - NHibernate:在不使用第二个类的情况下映射一对多关系以填充集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19722274/

相关文章:

c# - 返回 IQueryable 类型 : The entity or complex type '' cannot be constructed in a LINQ to Entities query

c# - 如何添加smtp hotmail账号发送邮件

c# - Nhibernate一对多添加元素

php - 如何在 Laravel 中的嵌套 2 级关系中按列排序?

linq - Linq到NHibernate项目状态?有贡献吗?铅?

c# - 机器人框架 : How to exit Conversation?

c# - SignalR:我无法从服务器调用 .net 客户端方法

nhibernate - 在 NHibernate 中映射 View 的策略

linq - Nhibernate 为 fetch 生成 OUTER JOIN

c# - hibernate 。在同一 session 中创建后包为空