2011-06-12 23 views
1

我使用SQL Server上fluentnhibernate 2008爲什麼schemaexport會生成2個外鍵?

我有對象人員

public class Staff : BaseEntity 
{ 
    public virtual string UserName { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual string Email { get; set; } 
    public virtual bool Active { get; set; } 
    public virtual StaffRole StaffRole { get; set; } 
} 

和StaffRole

public class StaffRole : BaseEntity 
{ 
    public virtual int RoleId { get; set; } 
    public virtual int RoleName { get; set; } 
    public virtual IList<Staff> Staffs { get; set; } 
} 

,並相應地映射它們:

public class StaffRoleMap : ClassMap<StaffRole> 
{ 
    public StaffRoleMap() 
    { 
     Id(x => x.RoleId).Not.Nullable().Length(15); 
     Map(x => x.RoleName).Not.Nullable().Length(75); 
     HasMany(x => x.Staffs); 
    } 
} 
public class StaffMap : ClassMap<Staff> 
{ 
    public StaffMap() 
    { 
     Id(x => x.UserName).Not.Nullable().Length(15); 
     Map(x => x.FirstName).Not.Nullable().Length(25); 
     Map(x => x.LastName).Not.Nullable().Length(25); 
     Map(x => x.Email).Not.Nullable().Length(30); 
     Map(x => x.Active).Not.Nullable().Default("1"); 
     References(x => x.StaffRole) 
      .ForeignKey("FKStaffRole") 
      .Column("RoleId") 
      .Cascade.None() 
      .Not.Nullable() 
      ; 
    } 
} 

當我叫schemaexport,爲什麼它會生成2個外來的StaffRole的鑰匙?我總是得到RoleIdStaffRole_id。 RoleId是正確的,因爲它不能爲空,但額外的列/ fk是可以爲空的。

我失去了一些東西在這裏?

回答

1

是的。您必須在關係的一側設置「反向」。這相當於在常規的nhibernate xml config中設置inverse = true。

相關問題