2012-11-12 59 views
0

無法更新/插入數據到數據庫 這是我的表有:連貫NHibernate多到許多額外的列映射更新

角色(ID,姓名,...)

特權(ID,姓名,...)

RolePrivilege(ID,角色ID,PrivilegeId,IsAllowed)

我有地圖:

public class RoleWithPrivilegesEntityMap : ClassMap<RoleWithPrivilegesEntity> 
{ 
     public RoleWithPrivilegesEntityMap() 
     { 
      Table("ROLE"); 
      Not.LazyLoad(); 
      Id(x => x.Id, "ID").GeneratedBy.Identity(); 
      Map(x => x.Name, "NAME").Not.Nullable().Length(100); 
      HasMany(x => x.RolePrivileges) 
       .Cascade.AllDeleteOrphan() 
       .Inverse() 
       .Fetch.Join().KeyColumn("RoleId"); 
     } 
} 

public class PrivilegeEntityMap : ClassMap<PrivilegeEntity> 
{ 
    public PrivilegeEntityMap() 
    { 
     Table("PRIVILEGE"); 
     Id(x => x.Id, "ID").GeneratedBy.Identity(); 
     Map(x => x.Name, "NAME").Not.Nullable(); 
     HasMany(x => x.RolePrivileges) 
      .Cascade.AllDeleteOrphan() 
      .Inverse() 
      .Fetch.Join().KeyColumn("PrivilegeId"); 
    } 
} 

public class RolePrivilegeEntityMap : ClassMap<RolePrivilegeEntity> 
{ 
     public RolePrivilegeEntityMap() 
     { 
      Table("ROLEPRIVILEGE"); 
      Id(x => x.Id, "R_ID").GeneratedBy.Identity(); 
      Map(x => x.IsAllowed, "ISALLOWED").Not.Nullable(); 
      References(x => x.Role) 
       .Not.Nullable() 
       .Column("R_ID"); 
      References(x => x.Privilege) 
       .Not.Nullable() 
       .Column("P_ID"); 
     } 
} 

我想更新現有記錄

session.SaveOrUpdate(rolePrivilege) 

數據庫使INSERT INTO表RolePrivilege,但我需要先刪除記錄。

我做錯了什麼?

回答

0

通常沒有任何東西會進入數據庫,因爲您永遠不會撥打session.Flush()transaction.Commit()。但是,使用Id生成標識,您基本上會迫使NHibernate立即插入,因此您會看到INSERT語句。

你也可以去掉RolePrivilegeEntity中的Id並在Role和Priviledge上形成一個compositeId,它也可以提高性能(不需要立即插入)。

相關問題