我有一个带定义的表Tale
public class Tale
{
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public DateTime ReleaseDate { get; set; }
public int enum_TaleAuthorTypeId { get; set; }
public virtual enum_TaleAuthorType enum_TaleAuthorType { get; set; }
public int CommentableId { get; set; }
public virtual Commentable Commentable { get; set; }
}
当我在控制台中输入'update-database'时,我与CommentableId的一列和enum_TaleAuthorTypeId的列有很好的关系。
现在,我想添加UserProfile并尝试输入类似:
的内容public int UserProfileId { get; set; }
public virtual UserProfile UserProfile { get; set; }
但是在添加迁移之后,我有了这个:
AddColumn("dbo.Tales", "UserProfileId", c => c.Int(nullable: false));
AddColumn("dbo.Tales", "UserProfile_UserId", c => c.Int());
我应该如何只获得一列价值?为什么要创建两列?
答案 0 :(得分:0)
问题在于,根据惯例,EF希望UserProfile
的主键为Id
,但您将其设为UserId
。
您可以将UserId
中的UserProfile
的属性名称更改为Id
,以便EF按惯例推断密钥,或覆盖约定并将UserId
保留为主键。
您可以使用属性覆盖约定,例如
[ForeignKey("UserProfileId")]
public virtual UserProfile UserProfile { get; set; }
或使用Fluent API,例如
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Tale>()
.HasRequired(a => a.UserProfile)
.WithMany()
.HasForeignKey(u => u.UserProfileId);
}