架构中的每个类型名称都必须是唯一的

本文关键字:唯一 类型 | 更新日期: 2023-09-27 18:01:14

我有一个具有以下结构的模型,其中我有可以在系统中使用的代码列表。

汽车和发动机之间有一对一的关系,所以我希望将发动机的详细信息映射到car表中,这样发动机就不是一个实体,它只是一个领域模型抽象。该引擎包含一个描述引擎类型的代码。

我的dbcontext有一个用于CodeList和Car的DbSet,因为它们是系统中的两个聚合根。当我试图将其映射到数据库时,我得到以下错误:

架构中的每个类型名称都必须是唯一的。类型名称"Code"已定义。

如果我删除Engine类中的Navigation属性,那么问题就会消失,但我希望能够访问Code值,而不必独立查找它。如果我移除虚拟并尝试直接映射代码的id属性,它会告诉我代码被定义为实体,可能不会被重新定义为复杂类型。我不确定我哪里出了问题——这似乎是一个直截了当的用法。看起来Engine被视为复杂类型,因此不能具有导航属性。

CodeList
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Code> codes {get;set;}
}
Code
{
    public int Id {get;set}
    public string Value {get;set;}
}

public Car
{
    public int Id {get;set;}
    public Engine Engine {get;set;}
}
public Engine 
{
    public int Size {get;set;}
    public int TypeId {get;set;}
    public virtual Code Type {get;set;}
}

架构中的每个类型名称都必须是唯一的

当我遇到你的问题时,我也遇到了类似的问题。根据@LadislavMrnka的说法,在EF中,复杂类型根本不能包含导航属性。显然,NHibernate确实支持这一点。如果坚持EF,你将不得不改变你的模型来适应这个"功能"。无论如何,这就是我最终所做的。