2013-07-18 30 views
1

我試圖建立以下用流利的API(實體框架V5)域類之間的外鍵關係:如何使用Entity Framework 5 Fluent API設置列名不同的外鍵?

public partial class User 
{ 
    public long UserID { get; set; } 
    public string UserName { get; set; } 
} 
public partial class AccountGroup : BaseEntity 
{ 
    public long AccountGroupID { get; set; } 
    public string Name { get; set; } 
    public long ModifiedBy { get; set; } 
    public virtual User User { get; set; } 
} 

流利的API

builder.Entity<User>().HasKey(p => p.UserID); //Set User Id as primary key 
builder.Entity<AccountGroup>().HasKey(x => x.AccountGroupID); //SetAccountGroupId as PK 

我不知道如何設置之間的關係User.UserId和AccountGroup.ModifiedBy列使用流利的API。我可以通過數據註解做到這一點,但我使用流暢API

+0

我可能誤解了這個問題。您是否嘗試將ModifiedBy設置爲用戶導航屬性的FK? –

+0

@TimB是的,我正在努力做到這一點。 –

回答

3

從實體中刪除ModifiedBy財產尋找一個解決方案:

public partial class AccountGroup 
{ 
    public long AccountGroupID { get; set; } 
    public string Name { get; set; } 
    public virtual User User { get; set; } 
} 

然後映射外鍵,像這樣:

builder.Entity<AccountGroup>() 
    .HasRequired(x => x.User) 
    .WithMany() 
    .Map(m => m.MapKey("ModifiedBy")); 

使用HasOptional代替如果外鍵應該是可空:

builder.Entity<AccountGroup>() 
    .HasOptional(x => x.User) 
    .WithMany() 
    .Map(m => m.MapKey("ModifiedBy")); 

你也不需要像你一樣指定主鍵。實體框架將通過約定發現這些。

+0

感謝您的回答。我明白,實體框架將自動添加外鍵User_UserId列。不過,我想通過將AccountGroup.ModifiedBy作爲User.UserId列的外鍵來自定義該行爲。 –

+0

更新了我的答案。我認爲它會做你想要的。 –

相關問題