2012-01-26 12 views
1

私は実用的なモデルを持っていますが、関係がデータベース内で2回作成されていることに気がつきました。もともと、テーブルには2つの列が作成されていましたが、指定された外部キー属性が追加されています。コードファーストEFリレーションシップ重複

私は、アカウントを使用できる多くの雇用主を持つAccountクラスを持っています。 (多くの1)ここでは、クラスである:ここ

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; } 

} 

が継承された雇用者クラスが

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フィールドのものですが、これは正しいです。アカウント - >雇用者の2つの関係があります。 EFの名前はAccount_EmployersEmployer_Accountです。これらは重複しています。

どうすればこのようなことを防ぐことができますか?

答えて

2

コレクションは、反対側のナビゲーションプロパティを指すように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; }  
} 
+0

お返事ありがとうございました。私はちょうどテストとしてそれをやった。私の調査結果を正しい答えとして確認して嬉しいです! – Simon

+0

サイモン、答えが良いならば、それを受け入れるだけではなく、それをアップヴォートすることを検討してください。 –

+0

私は15評判までupvoteすることはできません...他にも私は非常にしたいと思います。ごめんなさい! – Simon

関連する問題