2013-04-01 75 views
1

我重新實現了成員資格提供者並希望保留原始DB方案。我有2類:如何在同一屬性中定義PK和FK

class UserProfile 
{ 
    public int UserId {get;set} //PK 
...... 
} 

class Membership 
{ 
    public int UserId {get;set;} //FK to UserProfile.UserId 
......... 
} 

現在我附上Membership.UserId爲FK使用FluentAPI到UserProfile.UserId,我想這也是對PK成員關係表。

我可以保證UserProfile.UserId是數據庫生成的身份,不會重複。 我嘗試了以下代碼,但在創建遷移過程中出現錯誤時失敗:

類型中的每個屬性名稱都必須是唯一的。屬性名稱'UserId'已經被定義。

HasKey(k => k.UserId);      //Declare it as PK   !!!! 
Map(m => m.ToTable("webpages_membership")); //Setup table name 

HasRequired(t => t.User)      //Nav.property to the UserProfile 
    .WithRequiredDependent(t1 => t1.Membership) //Rev.nav.property from the UserProfile 
    .Map(m => m.MapKey("UserId"));    //FK to the UserProfile !!!! 

如果我除去驚歎號標誌標遷移任何行創建罰款,但有錯誤的列名。

回答

0

我覺得這是你追求的...

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
... 
modelBuilder.Entity<Membership>() 
    .HasKey(x => new { x.UserId }); 

modelBuilder.Entity<Membership>() 
      .HasRequired(x => x.User) 
      .WithOptional(x => x.Membership); 

與實體...

public class UserProfile 
{ 
    [Key] public int UserId { get; set; } 
    public Membership Membership { get; set; } 
} 
public class Membership 
{ 
    public int UserId { get; set; } 
    public UserProfile User { get; set; } 
} 

...或只是.WithOptional();如果你想刪除會員導航屬性上用戶。