我是一个初学者,首先使用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] 删除。
我来说两句