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

标签 c# entity-framework

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

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

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

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

如果我删除 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 中,一个 complex type simply cannot contain a navigation property .显然,然而NHibernate does support this .如果坚持使用 EF,则必须更改模型以适应此“功能”。无论如何,这就是我最终所做的。

关于c# - 架构中的每个类型名称必须是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068439/

相关文章:

c# - 格式加倍为百分比 - 显示所有小数?

c# - Linq 和 Entity Framework 在非主键值上不同

c# - Entity Framework 7 关系

sql-server - 如何停止EF4.1 Code-First为实体PK创建Culstered索引

c# - .Net Core - Entity Framework - MySQL > 未找到 UseMysql

c# - Lambda 表达式转换

c# - MVC LabelFor 用 CamelCase 替换下划线

c# - NLog 自动截断消息

entity-framework - 必须将外键映射到概念上参与外键关联的某些AssociationSet或EntitySet

c# - 业务逻辑的正确位置在哪里?