Code First EF дубликат отношений - PullRequest
1 голос
/ 26 января 2012

У меня есть рабочая модель, но я заметил, что отношения были созданы дважды в базе данных. Первоначально он создал два столбца в таблице, но с добавлением указанного атрибута внешнего ключа теперь имеет только один.

У меня есть класс Account, в котором работают многие работодатели. (один ко многим) Вот классы:

public class Account
{
    public int AccountId { get; set; }

    [Required(ErrorMessage = Constants.ValidationMessages.FieldRequired)]
    public string  Name { get; set; }

    public int? PrimaryUserId { get; set; }
    [ForeignKey("PrimaryUserId")]
    public Employer PrimaryUser { get; set; }

    [ForeignKey("EmpAccountId")]
    public ICollection<Employer> Employers { get; set; }

}

вот унаследованный класс Employer

public class Employer : User
{
    public Employer()
    {
        DepartmentsToPost = new Collection<Department>();
        Contacts = new Collection<Contact>();
    }

    [Display(Name = "Workplaces to advertise jobs")]
    public virtual ICollection<Department> DepartmentsToPost { get; set; }

    public int EmpAccountId { get; set; }
    [ForeignKey("EmpAccountId")]
    public virtual Account Account { get; set; }

    public override string UserType
    {
        get { return "Employer"; }
    }
}

Таблица пользователей:

UserId
Username
FirstName     
Surname 
EmpAccountId
Discriminator 

Таблица счетов

AccountId
Name
PrimaryUserId

Существует одна ссылка на таблицу User - это поле PrimaryUser, и это правильно. Есть два других отношения: Учетная запись -> Работодатели. EF назвал их Account_Employers и Employer_Account. Это дубликаты.

Как я могу предотвратить это?

1 Ответ

2 голосов
/ 26 января 2012

Коллекция Employers должна быть украшена InversePropertyAttribute , чтобы указывать на навигационное свойство на другой стороне.

public class Account
{
    public int AccountId { get; set; }

    [Required(ErrorMessage = Constants.ValidationMessages.FieldRequired)]
    public string  Name { get; set; }

    public int? PrimaryUserId { get; set; }
    [ForeignKey("PrimaryUserId")]
    public Employer PrimaryUser { get; set; }

    [InverseProperty("Account")]
    public ICollection<Employer> Employers { get; set; }    
}
...