我一直在研究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
属性并将其设置为外键。
为什么会这样?我该如何解决?我需要一段时间才能注意到这一点,因此我还有几次迁移,我是否已经完成了所有迁移,修复此问题(某种程度上),并再次通过它们进行备份?在数据库上手动更改它更容易吗?或者现在放弃并使用该字段作为外键?
答案 0 :(得分:1)
当实体框架无法自动找出关系时,它会添加一个像XXXXX_Id#这样的字段。在实体框架中,外键的数据类型必须与您所关联的实体的数据类型匹配,因此即使名称遵循约定,也不会使用它。有关关系约定,请参阅here。