我有一个遗留数据库,它使用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,但如果更新的版本可以帮助,我很灵活。