如何将项目放在多个表的实体类中

时间:2014-06-08 18:08:48

标签: c# entity-framework class

我是第一个使用asp.net Entity Framework数据库的初学者。

我需要从中获取数据的2个表,以及已经创建实体框架的2个类实体。我有以下代码。

using (PROJECT_DBEntities context=new PROJECT_DBEntities())
            {
                List<FirstInternship> lst=new List<FirstInternship>();

                lst = context.FirstInternships.SqlQuery("select * from FirstInternships ").ToList<FirstInternship>();

                repeater1.DataSource = lst;
                repeater1.DataBind();
            }

此代码仅带来FirstInternship表项。 但是我在Student表中也有字段。所以我改变了下面的代码,但是在连接表时不知道如何在类中保存字段。

using (PROJECT_DBEntities context=new PROJECT_DBEntities())
            {
                List<FirstInternship> lst=new List<FirstInternship>();

                lst = context.FirstInternships.SqlQuery("select * from FirstInternships f join Students s on s.id=fi.StudentID").ToList<FirstInternship>(); 

                repeater1.DataSource = lst;
                repeater1.DataBind();
            }

在这里,我需要自己创建第三堂课吗?或者,如果我想在类中保存多个表项,我如何使用实体类?什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

首先,Entity Framework是一个对象关系映射器(ORM)。它将关系数据库实体(例如:表)映射到对象(如面向对象的实体)。

您的PROJECT_DBEntities类应包含类型为DbSet<T>的属性,您可以通过该属性访问模型类(如FirstInternship),而无需编写单行SQL。您首先将代码段看起来像......

using (var context = new PROJECT_DBEntities())
{
    // It's useless to initialize the lst variable by a new List

    var lst = context.FirstInternships // No need to write SQL
                     .ToList();        // No need to specify the type

    repeater1.DataSource = lst;
    repeater1.DataBind();
}

然后在您的模型类中,您将找到像FirstInternship.Students这样的导航属性。这些导航属性允许您在不显式编写联接的情况下访问关联的实体。不在SQL中,甚至在LINQ代码中也没有。它可能看起来像......

using (var context = new PROJECT_DBEntities())
{
    var lst = from f in context.FirstInternships
              from s in f.Students
              select new { Internship = f.Name, Sudent = s.Name };
    repeater1.DataSource = lst;
    repeater1.DataBind();
}

select new之后的内容取决于您。这取决于你想在转发器中显示什么。建议为此目的创建视图模型或DTO类:

select new StudentDTO { Internship = f.Name, Sudent = s.Name, .... }