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

时间:2013-02-25 13:46:32

标签: c# entity-framework

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

汽车和引擎之间存在一对一的关系,因此我希望将引擎详细信息映射到Car表,因此引擎不是一个实体,它只是一个域模型抽象。该引擎包含描述引擎类型的代码。

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

架构中的每个类型名称必须是唯一的。类型名称“代码”已定义。

如果我删除Engine类中的Navigation属性,那么问题就会消失,但我希望能够访问Code值而无需单独查找。如果我删除虚拟并尝试直接映射代码的id属性,它会告诉我Code被定义为实体,并且可能不会被重新定义为复杂类型。我不知道我在哪里出错这似乎是一个直接的用法。看起来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;}
}

1 个答案:

答案 0 :(得分:4)

当我遇到你的问题时,我遇到了类似的问题。据@LadislavMrnka所说,在EF,complex type simply cannot contain a navigation property。显然,NHibernate does support this。如果坚持使用EF,则必须更改模型以适应此“功能”。无论如何,这就是我最终做的事情。