0

我有一个有定义的表故事

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());

我应该如何只获得一列的价值?为什么要创建两列?

4

1 回答 1

0

问题在于,按照惯例,EF 期望主键为UserProfileId但您将其设置为UserId.

您可以更改 in 的属性名称,UserId以便UserProfileEFId按约定推断键,或者覆盖约定并保留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);

}
于 2012-10-15T22:23:03.547 回答