3

使用以下模型創建級聯外鍵時會出現問題,其中只有一個模型(UserAddition)知道另一個(用戶),並且不能將UserAddition屬性添加到用戶類:Fluent NHibernate Foreign Key/Cascading

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

感謝。

+0

映射之間可能存在缺失的鏈接。你已經看過http://stackoverflow.com/questions/4017901/fluent-nhibernate-cascade-delete-not-working –

+0

正如我上面所述,用戶不能有一個鏈接到UserAddition - 只有UserAddition可以有一個用戶字段 - 我正在尋找一個解決方案,我不需要修改用戶類。 – Fionn

+0

http://stackoverflow.com/a/7737697/40822 – dotjoe

回答

0

可以嘗試此:

this.References(X => x.RemoteUser).COLUMN( 「YourColumnName」)Cascade.All();

+0

也無法運行,刪除和更新級聯操作仍然生成作爲「不採取行動」。 – Fionn

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類。我明白,這是你不想要的(如上所述),但這只是認爲你可以開箱即用...