我一直在学习 Udemy 上的教程,但似乎在某个地方犯了错误。在一个模型中,EF 似乎添加了一个附加属性作为外键。这是模型:
public class Movie
{
public int Id { get; set; }
public string Name { get; set; }
public Genre Genre { get; set; }
public byte GenreId { get; set; }
[Display(Name = "Number in Stock")]
public int NumberInStock { get; set; }
[Display(Name = "Release Date")]
public DateTime? ReleasedOn { get; set; }
public DateTime? AddedOn { get; set; }
}
这是由此生成的迁移 EF:
public override void Up()
{
CreateTable(
"dbo.Movies",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
GenreId = c.Byte(nullable: false),
Genre_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Genres", t => t.Genre_Id)
.Index(t => t.Genre_Id);
CreateTable(
"dbo.Genres",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.Id);
}
您可以看到它添加了额外的 Genre_Id
属性并将其设置为外键。
为什么会发生这种情况?我该如何解决它?我花了一段时间才注意到,所以自这一次以来我又进行了几次迁移,我是否要遍历所有这些迁移,修复此问题(以某种方式),然后再次备份它们?在数据库上手动更改它是否更容易?或者现在放弃并使用该字段作为外键?
最佳答案
当 Entity Framework 无法自动找出关系时,它会添加一个类似 XXXXX_Id# 的字段。在 Entity Framework 中,外键的数据类型必须与您所关联的实体的数据类型匹配,因此即使名称遵循约定,它也不会被使用。请参阅here用于关系约定。
关于c# - 为什么 Entity Framework 添加了 '...Id' 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49181563/