流利的NHibernate外键/级联

时间:2014-02-16 22:33:12

标签: nhibernate fluent-nhibernate foreign-key-relationship cascade fluent-nhibernate-mapping

使用以下模型创建级联外键时会出现问题,其中只有一个Model(UserAddition)知道另一个(User),并且不可能将UserAddition属性添加到User类:

class User {
    public virtual Guid Id { get; set; }
    // Other fields of no relevance
}

class UserAddition {
    public virtual Guid Id { get; set; }
    public virtual User RemoteUser {get; set; }
    public virtual string AdditionalData {get; set; }
}

为UserAddition生成的SQL表应该有一个用户的外键,设置为ON DELETE CASCADE(ON UPDATE的设置并不重要)。

使用以下映射类时,外键始终设置为“无操作”,即使在映射中另有指定。我错过了什么吗?

public class UserAdditionMapping : ClassMap<UserAddition>
{
    public TrainerToEmployeeMapping()
    {
        this.Id(x => x.Id);
        this.References(x => x.RemoteUser).ForeignKey().Cascade.All();
    }
}

正在使用的数据库是Microsoft SQL Server 11。

感谢。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

this.References(x =&gt; x.RemoteUser).Column(“YourColumnName”)。Cascade.All();

答案 1 :(得分:0)

答案在这里NHibernate mapping not adding ON DELETE CASCADE option to foreign key reference。引用:

  

NHibernate只能对反向集合生成on delete cascade个约束。

NHibernate.Mapping.Collection的代码段:

public virtual void Validate(IMapping mapping)
{
    if (Key.IsCascadeDeleteEnabled && (!IsInverse || !IsOneToMany))
    {
      throw new MappingException(string.Format(
          "only inverse one-to-many associations may use on-delete=\"cascade\": {0}", Role));
    }
 ...

然后,流利地说,你有这样的映射:

HasMany(x => x.UserAdditions)
   ...
   // the setting
   .ForeignKeyCascadeOnDelete()

但它会反过来,并且需要更改User类。我明白这是你不想要的(如上所述),但这只是认为你可以开箱即用......