nhibernate - 流利的 NHibernate 外键/级联

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

使用以下模型创建级联外键时会出现问题,其中只有一个模型 (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 表应该有一个指向 User 的外键,该外键设置为 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。

谢谢。

最佳答案

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

NHibernate can only generate on delete cascade constraints on inverse collections.



来自 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类(class)。我明白这是你不想要的(如上所述),但这只是认为你可以开箱即用......

关于nhibernate - 流利的 NHibernate 外键/级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21817642/

相关文章:

mysql - 用户反馈系统的正确数据库模型(一个有趣的案例)

sql - SQLAlchemy允许将null作为ForeignKey

nhibernate - 如何使用 Fluent Nhibernate 映射没有唯一标识列的 VIEW

fluent-nhibernate - 列名约定

nhibernate - 使用 Fluent NHibernate 命名为 "Order"的 DB 列

database - 数据库设计:解释此架构

oracle - NHibernate 2.1 和 Oracle 10g 客户端出错

c# - 如何检查键是否是 NHibernate 中未保存的值

nhibernate - 希望加入的路径!休眠错误

NHibernate SysCacheProvider 默认过期和缓存区域