2016-04-26 179 views
2

我對實體框架的知識有限,並且遇到與我的對象關係有關的一些問題。我有以下實體:主鍵上的C#EF導航屬性

public class Reseller 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public ResellerLevel? ResellerLevel { get; set; } 
    public ResellerLevel? HosterLevel { get; set; } 

    public ResellerMail Mail { get; set; } 
    public virtual ObservableCollection<ResellerMail> Mails { get; set; } 

    public Reseller() 
    { 
    Mails = new ObservableCollection<ResellerMail>(); 
    } 
} 

public class ResellerMail 
{ 
    [Key, ForeignKey("Reseller")] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Mail { get; set; } 
    public string Display 
    { 
    get 
    { 
     return String.Format("{0} <{1}>", Name, Mail); 
    } 
    } 

    public virtual Reseller Reseller { get; set; } 
} 

我想達到以下兩個關係:

  • 一對許多經銷商和郵件之間: 基本上鍊接到郵件列表經銷商。

  • 一對一關係 從下拉列表中選擇經銷商的郵件。它可能只是郵件的Id,但我想附加一個導航屬性。

我該怎麼去做這件事?

+0

你所有的數據關係工作正常與上述設置? – Sampath

回答

0

首先,請勿在模型中使用ObservableCollection,因爲此類型用於與UI進行交互(不應直接從模型中進行交互)。

至於兩個問題:

爲1: 只需設置一個虛擬集合爲ResellerEmail。這意味着您的模型將如下所示:

public class Reseller 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public ResellerLevel? ResellerLevel { get; set; } 
    public ResellerLevel? HosterLevel { get; set; } 

    public virtual ICollection<ResellerMail> Mails { get; set; } 

    public Reseller() 
    { 
    Mails = new ICollection<ResellerMail>(); 
    } 
} 

對於no2。您可以在ForeignKey以下有Reseller類型的對象。你可以嘗試這樣的:

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