C# Fluent Nhibernate接口列表
我正在尝试从另一个项目中实现一个接口,并使用fluent nhibernate将其持久化到数据库中。我已经知道了如何持久化接口的一个实例,但无法知道如何完成整个列表 我的班级定义如下: 公共接口IRunnable { int速度{get;set;} int-GetSpeed; } 映射定义是C# Fluent Nhibernate接口列表,c#,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我正在尝试从另一个项目中实现一个接口,并使用fluent nhibernate将其持久化到数据库中。我已经知道了如何持久化接口的一个实例,但无法知道如何完成整个列表 我的班级定义如下: 公共接口IRunnable { int速度{get;set;} int-GetSpeed; } 映射定义是 public class Person1Map : ClassMap<Person1> { public Person1Map() { Id(x => x
public class Person1Map : ClassMap<Person1>
{
public Person1Map()
{
Id(x => x.Id);
Map(x => x.Age);
Map(x => x.Velocity);
}
}
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Velocity);
//HasMany(x => x.Cars).Cascade.All();
}
}
public class CarMap : ClassMap<Car>
{
public CarMap()
{
Id(x => x.Id);
ReferencesAny<IRunnable>(x => x.Runnable)
.IdentityType<int>()
.EntityTypeColumn("RunnableType")
.EntityIdentifierColumn("RunnableId")
.AddMetaValue<Person>("P")
.AddMetaValue<Person1>("P1")
.Cascade.All();
HasMany(x => x.Runnables)
.KeyColumn("RunnableId")
.Cascade
.All();
}
}
任何引用都适用于接口的单个实例,当我有完整的接口列表时,如何使用这样的东西
谢谢 有很多接口不是那么容易,或者说它有一些局限性 这在一定程度上取决于您的映射策略—您的继承是如何工作的。查看文档 你已经可以找到一个好帖子了
基本上,您可能需要为接口添加类映射,并为实现创建子类映射。这将是每个具体类映射的表,应该可以很好地工作。fluent NHibernate的答案如下:,摘录: 许多人支持任何人 我们仍然不支持多对多 此处可以详细观察“多对多”的工作情况: 但最重要的信息可以在这里找到: 和元素提供了真正的异构关联。这些映射元素的工作方式与元素的工作方式相同,也应该很少使用
注意:请尝试重新思考您的模型。我的经验是,从任何角度简化都是成功的。换句话说,如果我们有一个像Tag这样的类,它几乎可以在任何地方被引用。。。通常我们不介绍IList A,IList B。。进入标签本身。但我们仍然可以找到与…相关的标签。。。通过一些查询使用您的笔记,您将如何对我概述的汽车类别进行建模?我对这种说法感到困惑,通常我们不介绍IList A,IList B。。首先,如果可能的话,我不会把IRunnable映射到汽车上。。。如果可能的话。如果我需要汽车使用IRunnable的东西作为收藏,我会把它映射为我的笔记对面的几个列表。我将引入与持久化实现者一样多的映射。IList人员作为第一个集合和IList人员。。。在上层,我可以发布这些对象的一些虚拟联合,但在查询期间,我会使用显式对象,而不是。总结,直到现在我还没有用过。要么没有映射,要么显式实现者映射
public class Person1Map : ClassMap<Person1>
{
public Person1Map()
{
Id(x => x.Id);
Map(x => x.Age);
Map(x => x.Velocity);
}
}
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Velocity);
//HasMany(x => x.Cars).Cascade.All();
}
}
public class CarMap : ClassMap<Car>
{
public CarMap()
{
Id(x => x.Id);
ReferencesAny<IRunnable>(x => x.Runnable)
.IdentityType<int>()
.EntityTypeColumn("RunnableType")
.EntityIdentifierColumn("RunnableId")
.AddMetaValue<Person>("P")
.AddMetaValue<Person1>("P1")
.Cascade.All();
HasMany(x => x.Runnables)
.KeyColumn("RunnableId")
.Cascade
.All();
}
}