0

我想從一個身份類與流利NHibernate映射一個Id。從身份類與流利NHibernate映射Id

Identity類:

public interface IValueObject<T> { 
    bool SameValueAs(T other); 
} 

[Serializable] 
public class Identity<TEntity> : IValueObject<Identity<TEntity>> { 

    public long Id { get; protected set; } 

    public Identity(long id) { 
     this.Id = id; 
    } 

    protected Identity() { } 

    public bool SameValueAs(Identity<TEntity> other) { 
     return other != null && this.Id == other.Id; 
    } 
} 

型號:

public interface IEntity<T> { 
    Identity<T> Identity { get; } 
    bool SameIdentityAs(T other); 
} 

public class Employee: IEntity<Employee> { 
    public virtual Identity<Employee> Identity { get; set; } 
    public virtual string Name { get; set; } 
} 

我怎樣才能映射這個員工?這樣是不行的,我建的SessionFactory當出現以下情況例外: 無法在課堂上找到屬性「ID」吸氣「僱員」

public class EmployeeMap : ClassMap<Employee> { 

    public EmployeeMap() { 
     Id(x => x.Identity.Id).GeneratedBy.Native(); 
     Map(x => x.Name); 
    } 
} 

回答

0

你所試圖做的是不支持的。

有一個更長的解釋,但特別是當使用DB生成的id時,應該使用unwrapped的本地int或long。

也就是說,你可以可以作爲一個私人字段在你的實體中映射id並將其暴露給你的包裝。這仍然不適用於LINQ查詢,所以它的價值有限。

+0

有沒有可能使用另一個ID戰略和包裝(身份類)? – Dani 2012-08-17 14:48:13

+0

也許使用'assigned'(即你的代碼負責在保存之前分配它),將包裝器映射爲一個複合ID ......但是,我認爲對於可疑的好處,你會遇到很多麻煩。 – 2012-08-17 16:58:43