0

定義のあるテーブル 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 の 1 つの列と enum_TaleAuthorTypeId の 1 つの列との関係がうまくいきます。

ここで、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());

値の列を 1 つだけ取得するにはどうすればよいですか? なぜ2つの列を作成するのですか?

4

1 に答える 1

0

問題は、慣例により、EF は の主キーが であると想定しUserProfileIdいるのに、 として持っていることUserIdです。

UserIdinのプロパティ名を に変更しUserProfileId、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);

}
于 2012-10-15T22:23:03.547 に答える