C# 如何将集合导航属性添加到没有鉴别器的派生实体上?

C# 如何将集合导航属性添加到没有鉴别器的派生实体上?,c#,entity-framework-core,discriminator,entity-framework-core-3.0,C#,Entity Framework Core,Discriminator,Entity Framework Core 3.0,我有一个包含两个表的数据库,水果和板条箱板条箱有一个外键,引用水果表 我有一个库,LibraryA,具有DbContext(DbContextBase),还有一个模型,水果 我还有第二个项目,它引用了LibraryA,并包含它自己的DbContext(dbcontextended)以及板条箱实体 为了便于使用代码,我想将集合导航属性(ICollection clarets)添加到Fruit实体中,但我无法在LibraryA中执行此操作,因此我在第二个项目中创建了一个派生类: public par

我有一个包含两个表的数据库,
水果
板条箱
<代码>板条箱有一个外键,引用
水果

我有一个库,
LibraryA
,具有
DbContext
DbContextBase
),还有一个模型,
水果

我还有第二个项目,它引用了
LibraryA
,并包含它自己的
DbContext
dbcontextended
)以及
板条箱
实体

为了便于使用代码,我想将集合导航属性(
ICollection clarets
)添加到
Fruit
实体中,但我无法在
LibraryA
中执行此操作,因此我在第二个项目中创建了一个派生类:

public partial class Fruit : LibaryA.Models.Fruit
{
    public Fruit()
    {
        Crates = new HashSet<Crate>();
    }

    public virtual ICollection<Crate> Crates { get; set; }
}
公共部分类水果:LibaryA.Models.Fruit
{
公众水果()
{
板条箱=新的HashSet();
}
公共虚拟ICollection板条箱{get;set;}
}
即使不将其添加到
dbcontextended
并对其进行配置,我在运行时也会遇到以下异常:

System.InvalidOperationException:“水果”的鉴别器值为“水果”,与“水果”的鉴别器值相同。层次结构中的每个具体实体类型都需要具有唯一的鉴别器值。”

但是,这两个
水果
模型用于相同的表和相同的记录,因此没有字段来区分它们

在本例中,假设我无法将
板条箱
移动到
图书馆a


我想要的派生集合导航属性可以实现吗?

回答晚了,但我有相同的例外。。。
结果发现,基类意外地被用于DbContext而不是派生类。

回答晚了,但我有相同的异常。。。
事实证明,基类是在DbContext中意外使用的,而不是派生的。

将LibraryB中的Fruit作为LibraryA中Fruit的一个部分类,并将它们放在同一名称空间中如何?@JoostK我不确定这是最容易维护的解决方案,然而,我担心这是一个没有实际意义的问题,因为您不能让一个分部类跨越多个程序集:我没有意识到这是不可能的,但这完全有道理。我唯一能想到的另一件事不是你想要的,而是技术上半解决了这个问题。在LibraryB中定义一个扩展方法,让LibraryB中的Fruit成为LibraryA中Fruit的一个部分类,并将它们放在同一个命名空间中怎么样?@JoostK我不确定这是最容易维护的解决方案,然而,我担心这是一个没有实际意义的问题,因为您不能让一个分部类跨越多个程序集:我没有意识到这是不可能的,但这完全有道理。我唯一能想到的另一件事不是你想要的,而是技术上半解决了这个问题。正在libraryB中定义扩展方法