尝试使用 FNH 进行映射并遇到很多问题,最终发现 FNH 缺少,并且不再维护,所以我决定尝试 Nhibernate MappingByCode,它到目前为止有效但没有文档......
我找不到如何映射 IDictionary
Map(x => x.EntityDict,
m =>
{
m.Key(k => k.Column("ParentID"));
},
km =>
{
km.//??ManyToMany
vm =>
{
vm.//??ManyToMany
}
);
公里(键映射)中的选项是元素(值类型)/组件(同一个表中的内部对象)/多对多(在这种情况下我不太了解)
我尝试在两者中都使用 ManyToMany,因为这似乎是最合乎逻辑的事情,但它没有用。
保存字典时 SaveUpdate 已通过,但它没有保存到数据库中,并且无法取回字典。
编辑:这里是示例字典结构
public class Entity1Map : ClassMapping<Entity1>
{
public Entity1Map()
{
Id(x=> x.ID,m=>m.Generator(Generators.Guid));
}
}
public class Entity2Map : ClassMapping<Entity2>
{
public Entity2Map()
{
Id(x=> x.ID,m=>m.Generator(Generators.Guid));
}
}
public class Entity3 { public IDictionary<Entity1,Entity2> Dict { get;set; } }
public class Entity3Map : ClassMapping<Entity3>
{
public Entity3Map()
{
Id(x=> x.ID,m=>m.Generator(Generators.Guid));
//Map Dict??
}
}
至于表结构 -
Entity1 Table : ID Column
Entity2 Table : ID Column
Entity3 Table : ID Column
Dict Table : Entity3_ID,Entity1_ID,Entity2_ID
如果它是从不同的数据库中保存和重新创建的,则不必是此表结构
@Daniel - 这是 hbm
<map name="Targets" table="Dict">
<key column="Entity3ID" />
<map-key-many-to-many class="Entity1" column="Entity1ID" />
<many-to-many class="Entity2" column="Entity2ID" />
</map>
编辑3(我认为):
var entity3 = new Entity3();
var entity1 = new Entity1();
var entity2= new Entity2();
entity3.Dict[entity1] = entity2;
using (var session = GetSession())
{
session.SaveOrUpdate(entity1);
session.SaveOrUpdate(entity2);
session.SaveOrUpdate(entity3 );
session.Flush();
}