2016-04-26 117 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; }