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

perlynsparks

我是一个初学者,首先使用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表项。但是我在学生表中也有字段。因此,我更改了如下代码,但不知道在加入表时如何在类中保存字段。

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();
            }

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

格特·阿诺德

首先,实体框架是对象关系映射器(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, .... }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章