0

В настоящее время я борюсь с некоторыми свойствами отображения на своих моделях. Вот мои две модели. То, что я ищу, - это только уникальные PersonTypes (то есть MD, медсестра) в моей таблице, а персональная модель ссылается на эти персонализированные типы.Code-First Referencing Table

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

Что вы подразумеваете под «Я получаю дубликаты»? Можете ли вы показать код, который их производит? –

+0

Значит, вы не хотите, чтобы найти, какие «Личные» - это «MD»? Вы просто хотите использовать свойство «Лицо», которое указывает, какой из них «PeronsType»? Тогда это просто перечисление «PersonType». Для этого вам не нужна таблица «PersonType». – Dabblernl

ответ

0

Из вашего примера я понимаю, что у вас есть отношения «многие-ко-многим» между людьми и персонажами. Для EF CodeFirst, чтобы понять это, вам нужно создать симметричное свойство навигации в вашем PersonType: public virtual ICollection<Person> Persons.

+0

Это, безусловно, много-ко-многим, но есть много способов выразить их в коде. Я бы предпочел модель, в которой 'PersonType' не имеет коллекции' Персоны'. –

+0

Я пробовал это, и я получаю дубликаты в таблице PersonType. Я хотел бы сохранить PersonType чистым без дубликатов, просто обычную таблицу с элементами. Мне почти нужна справочная таблица с PersonId, PersonTypeId? – Joshua

+0

@GertArnold Насколько я знаю, есть только один способ выразить много-ко многим, и для этого требуется конфигурация в коде ('HasMany(). WithMany()'). У меня все в порядке, но это объяснить сложнее. –