我試圖創建一個如何引用具有2列複合類的CompositeId具有2列複合類的FluentNhibernate?
public class BaseMap<T> : ClassMap<T>
我的應用程序。它應該支持本地化的實體,它們的主鍵必須是兩個編號&語言:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => ((ILocalizedEntity)x).Language);
我想另一件事是一個局部類能夠引用另一個局部類。
我已經做了以下的(大量的研究後,這是我的全部):
public new ManyToOnePart<TOther> References<TOther>(Expression<Func<T, TOther>> memberExpression) where TOther : BaseEntity
{
if (typeof(ILocalizedEntity).IsAssignableFrom(typeof(TOther)))
{
return base.References(memberExpression)
.Columns("CategoryId")
.Columns("Language");
}
return base.References(memberExpression);
}
這給了我嘗試插入時IndexOutOfRange例外,原因是「語言」屬性被映射了兩次,但只有1中的DB語言欄,所以我這樣做:
public new ManyToOnePart<TOther> References<TOther>(Expression<Func<T, TOther>> memberExpression) where TOther : BaseEntity
{
if (typeof(ILocalizedEntity).IsAssignableFrom(typeof(TOther)))
{
return base.References(memberExpression)
.Columns("CategoryId")
.Columns("Language")
.Not.Update()
.Not.Insert();
}
return base.References(memberExpression);
}
從而解決了IndexOutOfRange問題,但並沒有完成我想要的。因爲它總是向列「CategoryId」插入NULL,因爲我指定了Not.Insert()和Not.Update(),所以它不會!
現在,我希望它映射「CategoryId」而不是「Language」,因爲它已經被映射,因爲它是ComposideId(主鍵)的一部分。
所以我給一個嘗試這樣的:
public new ManyToOnePart<TOther> References<TOther>(Expression<Func<T, TOther>> memberExpression) where TOther : BaseEntity
{
if (typeof(ILocalizedEntity).IsAssignableFrom(typeof(TOther)))
{
return base.References(memberExpression)
.Columns("CategoryId")
.Nullable()
.Columns("Language")
.Not.Update()
.Not.Insert();
}
return base.References(memberExpression);
}
Whishing不會插入或更新只是「語言」,而不是「類別ID」 - 但沒有運氣無論是。
我也試圖讓語言首先在PK:
CompositeId()
.KeyProperty(x => ((ILocalizedEntity)x).Language)
.KeyProperty(x => x.Id);
,改變了參考:
return base.References(memberExpression)
.Columns("Language")
.Not.Update()
.Not.Insert()
.Columns("CategoryId")
.Nullable();
但仍是 「Not.Insert()」,「不.Update()「影響」語言「&」CategoryId「。
我嘗試了 「參考」 調用之前映射 「的CategoryId」,像這樣:
Map(memberExpression, "Language");
return base.References(memberExpression)
.......
但失敗了。
任何人有任何想法,如何引用具有2列的類CompositeId從具有2列的類CompositeId當1列是主鍵和外鍵公用的?
儘可能避免compositeIds。以下也避免重複http://stackoverflow.com/a/5431842/671619 – Firo 2012-02-14 12:26:53
不過,如果我想使用它們,爲什麼它必須如此複雜?如果你想在程序和數據庫的體系結構中找到合適的東西,複合ID有時是最好的選擇......是不是? – 2012-02-16 20:41:31