2012-09-06 105 views
1

好的,讓我先解釋一下,這不是我的代碼。我正在接管另一名員工的項目。無論如何,這個項目正在使用Code First。我正在解決性能問題,但我得到一個奇怪的錯誤。如何不在EF中映射外鍵id(代碼優先)?

我基本上有兩個映射類來處理。我會編寫簡短的版本來簡潔。

public class User 
{ 
    public int UserId { get; set; } //primary key 
    //attributes here, not important 

    public int UserProfileId { get; set; } //foreign key id *i added this* 
    public UserProfile UserProfile { get; set; } //foreign key *i added this* 
} 

public class UserProfile 
{ 
    public int Id { get; set; } //primary key 
    //attributes here, not important 
} 

現在,這是一個非常標準的外鍵關係。但是,有一個警告。這些表正在從舊錶中刪除,如下所示:

modelBuilder.Entity<User>().ToTable("application_user"); 

然後,使用名稱將每個列映射到拉動的表的列。 不過,我想這兩個表合併成一比一的關係,像這樣:

modelBuilder.Entity<User>().HasRequired(x => x.UserProfile) 
      .WithMany() 
      .HasForeignKey(u => u.UserProfileId); //ERROR HERE - THIS COLUMN DOES NOT EXIST IN THE ORIGINAL TABLE 

現在,錯誤,據我所知道的是,在上表中, (UserProfileId)沒有外鍵列,所以我得到一個無效的列名錯誤。

有沒有一種方法,我可以不映射外鍵id列,仍然保持一對一的關係?

+0

貴'application_user'一個FK爲'UserProfile'表?或者'UserProfile'的PK也是'application_user'的FK? – Eranga

回答

1

既然您說用戶表上沒有UserProfileId,那麼您正在定義1:1關係,User和UserProfile表共享主鍵的位置正確嗎?

如果是的話,你可以映射這樣的:

 modelBuilder.Entity<User>() 
     .HasRequired(u => u.UserProfile) 
     .WithRequiredPrincipal(); 

,這將產生一個像這樣的數據庫:

enter image description here