如何添加一个列(操作时间)太多对多关系表?

时间:2011-11-07 10:12:38

标签: nhibernate many-to-many

我有一个表或域实体ChargaOperation,它映射到表 [ChargeOperation] 并与自己有多对多的关系。这就像抵消了客户的债务或分配树(父母和1个孩子的水平)。

ChargeOperation
{
  int Id,
  decimal Amount,
  IList<ChargeOperation>  DistributedDebts // a tree of distributions using many to many mapping
}

[Distribtions] 表的帮助下实现的关系,该表在代码中具有映射并且映射如下:

 public ChargeOperationMap()
    {
        Table("ChargeOperations");
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Amount).Not.Nullable().Column("Amount");


        HasManyToMany(x => x.DistributedDebts).Table("Distributions]")
                     .ParentKeyColumn("SourceId")
                     .ChildKeyColumn("SubjectId")
                     .Cascade.All();
    }

[Distribtutions] 有字段:

  • SourceId
  • SubjectId。

    SourceId是父级ChargeOperation.Id&amp;的ID。 subjectId是一个孩子(IList DistributedDebts之一)。 没关系,直到我必须为每个分发操作添加一个时间并更改表格 [Distribtutions] 的字段:

    • 的SourceID
    • SubjectId
    • TimeOfOperation

现在只有一个机会是创建Distribtutions的映射,打破多对多关系并创建两个一对多关系。 如何避免它,只需将timeOfOperation写入 [Distribtutions] 。 (我以一种观点阅读它,所以这不是一个阅读的问题)

1 个答案:

答案 0 :(得分:0)

如果您使用的是SQL Server,则始终可以将GetDate()的默认值添加到timeOfOperation列。

然后,只要将多对多表插入timeOfOperation列,就会收到当前的日期时间。由于您说该列是从视图中读出的,因此您根本不需要映射它。