2012-07-24 81 views
0

我目前正在使用模型上的一些映射屬性。這是我的兩個模型。 我想要做的是在我的表中只有唯一的PersonTypes(即MD,Nurse),而人員模型引用這些personTypes。Code-First引用表

public partial class Person 
{ 
    public Person() 
    { 
     this.PersonTypes = new List<PersonType>(); 
     this.Contacts = new List<Contact>(); 
    } 

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public int FacilityId { get; set; } 

    [DataType(DataType.Text), MaxLength(200), Required] 
    public string FirstName { get; set; } 

    [DataType(DataType.Text), MaxLength(200)] 
    public string MiddleName { get; set; } 

    [DataType(DataType.Text), MaxLength(200), Required] 
    public string LastName { get; set; } 

    public int? SpecialtyId { get; set; } 

    public bool IsEnabled { get; set; } 

    // Mapped Properties 

    [ForeignKey("FacilityId")] 
    public virtual Facility Facility { get; set; } 

    [ForeignKey("SpecialtyId")] 
    public virtual Specialty Specialty { get; set; } 

    public virtual ICollection<PersonType> PersonTypes { get; set; } 

    public virtual ICollection<Contact> Contacts { get; set; } 
} 

public partial class PersonType 
{ 
    public PersonType() 
    { 
    } 

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [DataType(DataType.Text), MaxLength(200), Required] 
    public string Name { get; set; } 

    public bool IsEnabled { get; set; } 
} 

PERSON1 = MD,護士 - PERSON2 = MD - Person3可能=護士,CNP

我不希望從上面的例子有MD在我PersonType表2倍。這可能嗎。謝謝。

+0

你是什麼意思「我得到重複」?你能顯示產生它們的代碼嗎? – 2012-07-24 18:37:54

+0

所以你不想找到哪個'Person'是'MD'?你只是想要一個'Person'屬性來指定它是哪個'PeronsType'?那是一個簡單的'PersonType'枚舉。你不需要一個'PersonType'表。 – Dabblernl 2012-07-24 18:55:06

回答

0

從你的例子中我可以看出你在Person和PersonType之間有多對多的關係。對於EF CodeFirst來理解這一點,您必須在您的PersonType中創建對稱導航屬性:public virtual ICollection<Person> Persons

+0

它當然是多對多的,但有更多的方法可以用代碼優先來表達它們。我更喜歡一個模型,其中'PersonType'沒有'Persons'集合。 – 2012-07-24 18:34:19

+0

我已經嘗試過,並且在PersonType表中獲得重複項。我想保持PersonType乾淨,沒有重複,只是一個普通的表與項目。我幾乎需要一個PersonId,PersonTypeId的參考表? – Joshua 2012-07-24 18:36:12

+0

@GertArnold據我所知,只有一種表示多對多的方法,它需要在代碼中配置('HasMany()。WithMany()')。對我來說很好,但解釋起來有點難。 – 2012-07-24 18:40:48