通过辅助键在Fluent Nhibernate中映射词典
我有一个遗留数据库,它使用guid将子对象映射到父实体 在我的域层中,我更喜欢掩盖这一怪癖,因此我希望我的父实体如下所示:通过辅助键在Fluent Nhibernate中映射词典,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个遗留数据库,它使用guid将子对象映射到父实体 在我的域层中,我更喜欢掩盖这一怪癖,因此我希望我的父实体如下所示: public class Parent { virtual public int Id {get; protected set; } virtual public string ParentContent { get; set; } virtual public Guid ReferenceId { get; set; } virtual p
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; }
}
mapping.HasMany<Broker>(x => x.Children)
.Table("Child")
.KeyColumn("ParentReferenceID")
.Inverse()
.AsMap<long>(index=>index.Id,val=>val.Type<Broker>());
然后,父级会将每个Child.Id映射到childrendictionary中的Child。子映射工作正常,但我似乎无法为父映射找到合理的映射
父表和子表中都存在一个名为ParentReferenceID的字段,因此我尝试将其映射为如下内容:
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; }
}
mapping.HasMany<Broker>(x => x.Children)
.Table("Child")
.KeyColumn("ParentReferenceID")
.Inverse()
.AsMap<long>(index=>index.Id,val=>val.Type<Broker>());
不幸的是,这会产生一个错误:
类型或方法有2个泛型参数,但提供了1个泛型参数。必须为每个泛型参数提供泛型参数
为了简化我的问题,我从尝试包语义开始,用IList替换父级的IDictionary。这是使用以下方式映射的:
mapping.HasMany<Broker>(x => x.Brokers)
.Table("Child")
.KeyColumn("ParentReferenceId")
.Inverse()
.AsBag();
这就产生了一个更明显的例外,
System.Data.SqlClient.SqlException:操作数类型冲突:uniqueidentifier与int不兼容
不幸的是,我似乎无法找到正确的方法来告诉它加入ReferenceID字段。正确的方法是什么?我更喜欢这本字典,但如果我能把这本书包用起来,我会相当高兴的
为了清楚起见,我使用的是一个Fluent构建,它与最近从git推出的SharpArchitecture捆绑在一起。Fluent dll标记为1.0.0.594版,但如果最近的版本有帮助,我会灵活处理。进一步挖掘使我找到了解决Bag问题的方法,尽管字典仍然给我带来了一些麻烦 该解决方案需要一个到Fluent NHibernate的OneToManyPart映射类的补丁。帽子尖到 理论上,AsMap应该以几乎相同的方式工作,但由于某种原因,我不完全清楚,它对我不起作用。稍后我将对此进行探讨,但我愿意接受建议