2012-10-15 129 views
0

我有一個定義映射到UserProfileId列在表

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; } 
} 

表的故事,當我在控制檯輸入「更新數據庫」,我有一個列CommentableId和一個不錯的關係爲enum_TaleAuthorTypeId。

現在,我想添加用戶配置,並嘗試鍵入類似:

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

再一次沒有答案... – user1612334

回答

0

問題在於,按照慣例,EF期望UserProfile的主鍵爲Id,但您將其設爲UserId

您可以在UserProfileId使EF推斷按照約定的關鍵改變UserId屬性名稱,或覆蓋該公約,並保持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); 

}