C# Fluent Nhibernate接口列表

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

我正在尝试从另一个项目中实现一个接口,并使用fluent nhibernate将其持久化到数据库中。我已经知道了如何持久化接口的一个实例,但无法知道如何完成整个列表

我的班级定义如下:

公共接口IRunnable { int速度{get;set;} int-GetSpeed; }

映射定义是

 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();

    }
}