模型创建级联外键时出现问题,其中只有一个模型(用户添加)知道另一个模型(用户),并且不可能将用户添加属性添加到用户类:
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(在更新时设置并不重要)。
使用以下映射类时,外键始终设置为"无操作",即使在映射中另行指定也是如此。我错过了什么吗?
public class UserAdditionMapping : ClassMap<UserAddition>
{
public TrainerToEmployeeMapping()
{
this.Id(x => x.Id);
this.References(x => x.RemoteUser).ForeignKey().Cascade.All();
}
}
正在使用的数据库是 SQL Server 11 Microsoft。
谢谢。
答案在这里 NHibernate 映射不会将 ON DELETE CASCADE 选项添加到外键引用。引用:
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
类。我确实明白这是你不想要的(如上所述),但这只是认为你可以开箱即用......
你可以试试这个:
这。引用(x => x.RemoteUser)。列("你的列名称")。Cascade.All();