【发布时间】:2017-10-19 10:26:29
【问题描述】:
如果我定义(首先在代码中)一个导航属性到 self 它可以工作(创建外键),但如果我定义 2 它不起作用。
如何创建 2 个外键self? 按照惯例,它们应该基于documentation 创建。
例如这有效(创建外键):
public class DbPart
{
[Key]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Source")]
public int? SourceId { get; set; }
public DbPart Source { get; set; }
[InverseProperty("Source")]
public List<DbPart> SourceParts { get; set; }
}
所以是这样的:
public class DbPart
{
[Key]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("SourceFake")]
public int? SourceFakeId { get; set; }
public DbPart SourceFake { get; set; }
[InverseProperty("SourceFake")]
public List<DbPart> SourceFakeParts { get; set; }
}
但不是这个:
public class DbPart
{
[Key]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Source")]
public int? SourceId { get; set; }
public DbPart Source { get; set; }
[ForeignKey("SourceFake")]
public int? SourceFakeId { get; set; }
public DbPart SourceFake { get; set; }
[InverseProperty("SourceFake")]
public List<DbPart> SourceFakeParts { get; set; }
[InverseProperty("Source")]
public List<DbPart> SourceParts { get; set; }
}
我还有另一个例子,我在数据库中写树结构,但只写 ParentId,我也写 RootId。同样,在向 self (ParentId, RootId) 引用 2 个属性时不会创建外键。
已编辑:
由于this 错误,它无法正常工作。简单的解决方案是从 Id 属性中删除 [Key] 或在 Steve Greene 答案中使用流利的解决方案。还要检查here。
【问题讨论】:
-
错误信息是什么?
-
没有错误,只是列没有定义为外键。
标签: entity-framework entity-framework-core