我是第一个使用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();
}
在这里,我需要自己创建第三堂课吗?或者,如果我想在类中保存多个表项,我如何使用实体类?什么是正确的方法?
答案 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, .... }