1
我有一個無法映射到一個顯式表的類。它所映射的表取決於使用它的上下文。基本上它應該如同我試圖將IDictionary<string, int>
綁定到表格一樣工作。將類映射到多個表
// this is a mapped entity, with a Guid Id, but it can't be mapped to one explicit table
public class NoTableClass : Entity<Guid>
{
}
// the table that this class gets its MyCollectionContext1 from depends on the HasMany mapping for that property
public class MappedClass1 : Entity<Guid>
{
public IEnumerable<NoTableClass> MyCollectionContext1 { get; set; }
}
// the table that this class gets its MyCollectionContext2 from depends on the HasMany mapping for that property
public class MappedClass2 : Entity<Guid>
{
public IEnumerable<NoTableClass> MyCollectionContext2 { get; set; }
}
// Mapping overrides
public void Override(AutoMapping<MappedClass1> mapping)
{
mapping.HasMany(Reveal.Member<MappedClass1, IEnumerable<NoTableClass>>("MyCollectionContext1"))
.Table("Table1")
.Access.Field()
.Cascade.AllDeleteOrphan();
}
public void Override(AutoMapping<MappedClass2> mapping)
{
mapping.HasMany(Reveal.Member<MappedClass2, IEnumerable<NoTableClass>>("MyCollectionContext2"))
.Table("Table2")
.Access.Field()
.Cascade.AllDeleteOrphan();
}
好像忽略了NHibernate的集合時有一個自定義類.Table()
映射方法。我不明白爲什麼可以用這種方式映射簡單類型的字典,但是具有自定義類的集合不能。
注意:我有我的理由不想使用繼承/泛型來解決這個問題,並且不想讓我映射到每個表的具體類型。我們有一個使用泛型的工作解決方案,但它爲我們創造了其他問題。
完美的作品,我一直在尋找這種解決方案爲期一天,謝謝你:)有一個問題。我看不出任何方法來映射'NoTableClass'的主鍵,以便每次插入都會生成一個新的'Guid'。這通常是通過擴展'Entity'或在類映射中通過使用'.Id()'來實現的。我可以在'.Component()'裏面做的唯一事情是'c.Map(x => x。 Id)'這將只是插入一個空的Guid。一旦我解決這個問題,我會接受你的答案。 –
如果你所需要的只是'Guid'的生成,那麼你可以在'NoTableClass' contrsuctor:'thid.Id = Guid.NewGuid()'中生成它。 – SHSE
我們真的不想在代碼中生成guid,我們的整個系統使用Guid作爲唯一標識符,並且在插入時由數據庫生成,我們不希望在代碼中生成id插入之前。 –