採取以下兩個實體: -NHibernate的導航屬性加盟只
public class Product
{
public virtual int Id { get; set; }
public virtual string ItemId { get; set; }
}
public class ProductDescription
{
public virtual int Id { get; set; }
public virtual string ItemId { get; set; }
public virtual string Description { get; set; }
}
這兩個實體由項目Id相關但並不總是存儲針對每一個產品項目Id一個產品描述。
我想要做的是在Product實體中設置一個ProductDescription導航屬性,然後我可以在HQL中使用該屬性,以便像執行其他導航屬性一樣執行連接等。我不希望有一個外鍵或任何強制關係。
在我所做的是爲嘗試如下: -
public class Product
{
public virtual int Id { get; set; }
public virtual string ItemId => ProductDescription?.ItemId;
public virtual ProductDescription ProductDescription { get; set; }
}
public class ProductMap
{
public ProductMap()
{
Id(x => x.Id);
References(x => x.ProductDescription).Not.Nullable().Column("ItemId").PropertyRef(x => x.ItemId).ForeignKey("none");
}
}
這工作絕對罰款時,從與導航性能工作,我所期望的數據庫讀取現有數據,當談到加入等
我未解決的問題是圍繞產品的持久性問題。當我存儲產品時,我不希望它檢查任何與ProductDescriptions的關係,我只是希望它存儲ItemId,並且如果並且當具有匹配的ItemId的ProductDescription被持久化時,我使用的任何聯接導航屬性應該工作。
我在持續嘗試如下: -
new Product
{
ProductDescription = new ProductDescription { ItemId = "SomeId" }
}
這似乎工作精絕,直到我試圖讓項目Id產品非可空,在這一點上,我得到通常的錯誤你當你還沒有在關係的另一邊設置Inverse()。但是,即使我在反向設置的ProductDescription上創建了HasMany關係,它仍然沒有解決問題。
我希望以上概述我正在嘗試做什麼。我可以使它幾乎完全按照我的想法工作,除非我強制將產品的ItemId設置爲可爲空。
任何想法如何解決這個問題?