实体框架在类中嵌套类

时间:2017-11-17 15:56:18

标签: c# class asp.net-mvc-5 model entity-framework-6

我尝试创建一个允许用户将公司添加到列表中的数据模型,然后在添加时,允许添加有关公司的更多详细信息,这样可以添加员工信息等内容。但是,如果不创建多个类,控制器文件和视图文件夹,我无法弄清楚如何执行此操作。

我在模型类文件中的当前代码是:

namespace Intranet.Models
{
    public class AddCustomers
    {
        public int AddCustomersID { get; set; }
        public string CompanyName { get; set; }
        ...

        public class EmployeeInfo
        {
            public int EmployeeInfoID { get; set; }
            public string Forename { get; set; }
            ...
        }

        public class ContactInfo
        {
            public int ContactInfoID { get; set; }
            public string Code { get; set; }
            ...
        }
    }
}

上下文文件:

public IntranetContext() : base("name=IntranetContext")
{
}


protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

public System.Data.Entity.DbSet<Intranet.Models.AddCustomers> AddCustomers { get; set; }
public System.Data.Entity.DbSet<Intranet.Models.AddCustomers.EmployeeInfo> EmployeeInfo { get; set; }
public System.Data.Entity.DbSet<Intranet.Models.AddCustomers.ContactInfo> ContactInfo { get; set; }

但这不起作用,因为嵌套类不会出现在任何地方,除了我的本地数据库。

有没有办法让嵌套类出现在每个客户的详细信息视图中?或者有一种完全不同的方法吗?

1 个答案:

答案 0 :(得分:0)

namespace Intranet.Models
{
    public class AddCustomers
    {
        public int AddCustomersID { get; set; }
        public string CompanyName { get; set; }
        public EmployeeInfo EmployeeInfo { get; set; }
        public ContactInfo ContactInfo { get; set; }
        ...
    }

    public class EmployeeInfo
    {
        public int EmployeeInfoID { get; set; }
        public string Forename { get; set; }
        ...
    }

    public class ContactInfo
    {
        public int ContactInfoID { get; set; }
        public string Code { get; set; }
        ...
    }        
}

然后在您的上下文中,您将拥有:

public System.Data.Entity.DbSet<Intranet.Models.AddCustomers> AddCustomers { get; set; }
public System.Data.Entity.DbSet<Intranet.Models.EmployeeInfo> EmployeeInfo { get; set; }
public System.Data.Entity.DbSet<Intranet.Models.ContactInfo> ContactInfo { get; set; }

..在控制器中,您可以执行以下操作:

var customer = context.AddCustomers
    .FirstOrDefault(c=>c.EmployeeInfo.Forename=="bob");
...