我有一個遺留數據庫,它使用guid將子項映射到父實體。通過輔助鍵映射Fluent Nhibernate中的字典
在我的領域層,我寧願掩蓋這一怪癖,所以我想有我父實體是這樣的:
public class Parent
{
virtual public int Id {get; protected set; }
virtual public string ParentContent { get; set; }
virtual public Guid ReferenceId { get; set; }
virtual public IDictionary<int,Child> Children { get; set; }
}
public class Child
{
virtual public int Id { get; protected set; }
virtual public Parent { get; set; }
virtual public string ChildContent { get; set; }
}
的父母會那麼每個Child.Id映射到兒童在兒童字典中。 Child映射工作正常,但我似乎無法爲父級找到合理的映射。
都存在父和子表在一個名爲ParentReferenceID場,所以我試圖用這樣的映射這樣的:
mapping.HasMany<Broker>(x => x.Children)
.Table("Child")
.KeyColumn("ParentReferenceID")
.Inverse()
.AsMap<long>(index=>index.Id,val=>val.Type<Broker>());
不幸的是,這將產生一個錯誤: 類型或方法有2通用參數,但提供了1個通用參數。必須爲每個通用參數提供泛型參數。
爲了簡化我的問題,我開始嘗試使用Bag語義,用IList替換Parent的IDictionary。
mapping.HasMany<Broker>(x => x.Brokers)
.Table("Child")
.KeyColumn("ParentReferenceId")
.Inverse()
.AsBag();
產生較爲明顯的例外, System.Data.SqlClient.SqlException:操作數類型衝突:這是使用類似映射的唯一標識符是與詮釋
遺憾的是不兼容的,我似乎無法找出正確的方式告訴它加入ReferenceID字段。什麼是正確的方式來做到這一點?我更喜歡字典,但如果我甚至可以讓包工作,我會相當高興。
爲了清楚起見,我使用的是與從git中抽取的最近SharpArchitecture捆綁在一起的Fluent版本。 Fluent dll標記的版本是1.0.0.594,但如果更新的版本可以幫助,我很靈活。