MVC 5 EF6中的多对多关系

时间:2015-07-11 11:10:49

标签: asp.net-mvc linq entity-framework-6 viewmodel

我正在使用MVC 5和EF 6。

我的代码中有3个表:“Leads”,“Phones”,“LeadStatus”和联结表“LeadPhones”。 我想在索引视图中显示以下属性:

Leads.FullName
LeadStatus.Status
Phones.PhoneID

我应该如何配置LeadController?

public partial class Leads
{
    public Leads()
    {
        this.LeadPhones = new HashSet<LeadPhones>();
    }

    [Key]
    public int LeadID { get; set; }
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return NamePrefix + " " + FirstName + " " + LastName; } }
    public int LeadStatusID { get; set; } 

    public virtual LeadStatus LeadStatus { get; set; }
    public virtual ICollection<LeadPhones> LeadPhones { get; set; }
}

public partial class Phones
{
    public Phones()
    {
        this.AccountPhones = new HashSet<AccountPhones>();
        this.ContactPhones = new HashSet<ContactPhones>();
        this.EmployeePhones = new HashSet<EmployeePhones>();
        this.LeadPhones = new HashSet<LeadPhones>();
    }

    [Key]
    public int PhoneID { get; set; }           
    public string PhoneNo { get; set; }

    public virtual ICollection<LeadPhones> LeadPhones { get; set; }
}

public partial class LeadPhones
{
    [Key]
    public int LeadPhoneID { get; set; }
    public int LeadID { get; set; }
    public int PhoneID { get; set; }

    public virtual Leads Leads { get; set; }
    public virtual Phones Phones { get; set; }
}

public partial class LeadStatus
{
    public LeadStatus()
    {
        this.Leads = new HashSet<Leads>();
    }

    [Key]
    public int LeadStatusID { get; set; }
    public string Status { get; set; }

    public virtual ICollection<Leads> Leads { get; set; }
}

以下不起作用:

    public ActionResult Index()
    {            
        var leads = db.Leads.Include(l => l.LeadStatus).Include(l => l.LeadPhones);                       

        return View(leads);
    }

主要问题是“PhoneNo”。我怎么能从联结表中得到它?

1 个答案:

答案 0 :(得分:0)

从LeadPhones表中删除LeadPhoneID列 - 这不是必需的,只会给您带来问题。删除班级中对LeadPhones的所有引用。将虚拟财产引向电话(不是LeadPhones)。 LeadPhones具有Leads(不是LeadPhones)的虚拟属性。

在你这样做之后,你应该能够:

var leads = db.Leads.Include(l => l.LeadStatus).Include(l => l.Phones);

public partial class Lead
{
    public Lead()
    {
        this.Phones = new HashSet<Phone>();
    }

    [Key]
    public int LeadID { get; set; }
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return NamePrefix + " " + FirstName + " " + LastName; } }
    public int LeadStatusID { get; set; } 

    public virtual LeadStatus LeadStatus { get; set; }
    public virtual ICollection<Phone> Phones { get; set; }
} 

public partial class Phone
{
    public Phone()
    {
        this.AccountPhones = new HashSet<AccountPhones>();
        this.ContactPhones = new HashSet<ContactPhones>();
        this.EmployeePhones = new HashSet<EmployeePhones>();
        this.Leads = new HashSet<Lead>();
    }

    [Key]
    public int PhoneID { get; set; }           
    public string PhoneNo { get; set; }

    public virtual ICollection<Lead> Leads { get; set; }
}   
public partial class LeadStatus
{
    public LeadStatus()
    {
        this.Leads = new HashSet<Lead>();
    }

    [Key]
    public int LeadStatusID { get; set; }
    public string Status { get; set; }

    public virtual ICollection<Lead> Leads { get; set; }
}

我还纠正了你的多个班级。领导与潜在客户。该类描述了单个引导,因此它应该被称为Lead Lead。手机与手机。