2012-08-12 128 views
1

我想弄清楚如何使這項工作在EF中。我有兩個實體EmployeeUser。我需要這樣做,因此User可以映射到Employee。如果有映射,那麼它將是1:1。實體框架代碼的第一個關係

基本上這個系統可以被僱員和外部供應商訪問,但我想要一個表來管理登錄:Users

如何在流體配置的EF中定義這種實用性?

回答

3

你只需要設置簡單流暢的配置:

modelBuilder.Entity<User>() 
      .HasOptional(u => u.Employee) 
      .WithRequired(e => e.User); 

或以相反的順序:

modelBuilder.Entity<Employee>() 
      .HasRequired(e => e.User) 
      .WithOptional(u => u.Employee); 

EF將使用Employess的PK的FK到用戶 - 這是EF正確強制性要求使用一對一的關係。在數據註解的情況下,足以與ForeignKey屬性與User導航屬性配對,以紀念員工PK:

public class Employee { 
    [Key, ForeignKey("User")] 
    public int Id { get; set; } 

    public virtual User User { get; set; } 
} 
+0

那麼流暢的配置與註釋相同嗎?另外,在配置一對多關係時,我必須有一個外鍵字段和一個導航屬性嗎?所以在員工 - 用戶的情況下,我必須(在員工上)具有用戶標識和導航屬性用戶嗎? – Sam 2012-08-13 03:33:43

+0

是的流利配置與帶註釋的配置相同。在配置一對多關係時,數據庫中始終有FK,但類中FK屬性的存在因[兩種可能的關聯類型]而異(http://stackoverflow.com/questions/5281974/code-first-independent-關聯-vs-foreign-key-associations/5282275#5282275)在EF中使用。 – 2012-08-13 08:14:11

1
public class User 
{ 
    ... 
    public virtual Employee Employee { get; set; } 
} 

This tutorial可能會有所幫助。

+0

因此,所有你需要做的就是定義一個可空類型?定義一對多關係時,您是否必須定義導航屬性和Fk? – Sam 2012-08-12 07:16:00

+0

這甚至不會編譯,因爲只有值類型可以爲空。引用類型總是可以爲空,'Employee'是引用類型。 – 2012-08-12 08:14:30

+0

@LadislavMrnka你是對的,謝謝 – 2012-08-12 22:58:54

相關問題