C# 实体框架子类,现在需要Id/Key吗?

C# 实体框架子类,现在需要Id/Key吗?,c#,asp.net,.net,entity-framework,entity-framework-6,C#,Asp.net,.net,Entity Framework,Entity Framework 6,我的实体框架模型中有一个子对象。像这样的 public MyModel() { public long Id { get; set; } public string Name { get; set; } public MyModelReference Reference { get; set; } } public MyModelReference() { public bool IsActive { get; set;} public bool Nam

我的实体框架模型中有一个子对象。像这样的

public MyModel() {
    public long Id { get; set; }
    public string Name { get; set; }
    public MyModelReference Reference { get; set; }
}

public MyModelReference() {
    public bool IsActive { get; set;}
    public bool Name { get; set;}
}
public MyOtherModel() {
    public long Id { get; set; }
    public string Name { get; set; }
}

public MyModelReference() {
    public bool IsActive { get; set;}
    public bool Name { get; set;}
    public long OtherModelId { get; set; }
    public MyOtherModel OtherModel { get; set; }
}
这很好,在SQL中它创建了一个名为MyModel的表,其中有以下列

身份证

名字

参考文献

参考名称

这很好,因为在我的类中,与MyModel的引用相关的一切都放在MyModelReference类中,我可以通过访问MyModel中的引用属性来访问这些属性。干净整洁

现在我的库中还有其他模型,我想在MyModel和MyThermodel之间添加一个链接,但是由于这个属性是引用特有的,所以我想将它添加到MyModelReference类中。所以我也把它改成这样

public MyModel() {
    public long Id { get; set; }
    public string Name { get; set; }
    public MyModelReference Reference { get; set; }
}

public MyModelReference() {
    public bool IsActive { get; set;}
    public bool Name { get; set;}
}
public MyOtherModel() {
    public long Id { get; set; }
    public string Name { get; set; }
}

public MyModelReference() {
    public bool IsActive { get; set;}
    public bool Name { get; set;}
    public long OtherModelId { get; set; }
    public MyOtherModel OtherModel { get; set; }
}
现在出于某种原因,当我这样做并运行命令时

-update-database
我犯了这样的错误

EntityType“ModelReference”未定义键。定义此EntityType的键。 ModelReferences:EntityType:EntitySet“ModelReferences”基于未定义键的类型“ModelReference”

当父类定义了Id/键时,为什么必须向子类添加键?我的设置有误吗

我希望这个设置会给我一个包含以下列的表

身份证

名字

参考文献

参考名称

参考\其他模型ID


如果没有在类型上定义键,则该类型是复杂类型,就像它在
MyModelReference
中所做的那样

很遗憾,在复杂类型上不能有关联/关系:

复杂类型不能参与关联。关联的两端都不能是复杂类型,因此无法在复杂类型上定义导航属性


对不起,我不知道你是什么意思?我正在使用自己的类型?按照惯例,没有指定主键的类型被视为复杂类型。有些情况下,代码优先不会检测到复杂类型。请尝试将MyModelReference显式定义为复杂类型。在模型配置中添加:modelBuilder.ComplexType()转到上下文,找到OnModelCreating(DbModelBuilder modelBuilder)并添加modelBuilder.ComplexType()。他的模型中没有导航属性。有一个复杂类型。没有定义虚拟修饰符。@ViniciusGonçalves:我的意思是最初我想要一个复杂类型上的关联,这是不可能的。必须将ComplexType改为存储在单独的表中。谢谢@ViniciusGonçalves@ViniciusGonçalves:属性不需要
virtual
作为导航属性,删除
virtual
将禁用延迟加载。(见附件)