我在Sql数据库中有两个表,比如Users和UserEducation表。 用户表中有多个记录,每个用户在UserEducation表中有一条记录。我想通过加入这两个表来显示网格视图中的所有记录?我怎样才能使用Entity Framework?
答案 0 :(得分:1)
您只需使用User中的navigationproperty:
即可var user = new User();
user.UserEducation.[Property];
答案 1 :(得分:1)
因为有一对一的映射,我宁愿制作一个表。但具体来说你可以这样:
entityframeworkContext obj = new entityframeworkContext(); 列出xyz = obj.database.SqlQuery(“选择u.fieldname1作为modeltablefield1,u.fieldname2作为modeltablefield2,ued.fieldname1作为modeltablefield3,ued.fieldname2作为modeltablefield4来自用户u内部加入UserEducation ued on u.commonfield = ued.commonfield” );
这里的常用字段将是第二个表中的外键 模型表是组合查询中所需的任何逻辑表(特定于MVC)希望它适合您!!
答案 2 :(得分:1)
我创建了一个控制台应用程序来满足您的使用案例。您必须将此代码重用到您希望将输出绑定到网格视图的Windows窗体或基于Web的应用程序中。我假设POCO课程中有一些属性,您可以随时根据您为用户和教育实体保存的所有值来修改它们。我的代码片段中没有提到任何连接字符串。如果您没有提及连接字符串,实体框架会自动连接到计算机上的sql express数据库,或者它将连接到您在app.config或web.config文件中提到连接字符串的数据库。希望这有帮助!
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
namespace UsersCodeFirst
{
class Program
{
static void Main(string[] args)
{
using (var db = new EfContext())
{
// Display all users with their education from the database
var query = from user in db.Users
join userEducation in db.UserEducations
on user.UserId equals userEducation.UserId
orderby user.Name
select new
{
Name = user.Name,
UserEducation = userEducation.CourseName
};
//bind to grid by setting grid data source to query.ToList()
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
public class User
{
public string UserId { get; set; }
public string Name { get; set; }
public virtual List<Education> Posts { get; set; }
}
public class Education
{
public string EducationId { get; set; }
public string CourseName { get; set; }
public string UserId { get; set; }
}
public class EfContext : DbContext
{
public DbSet<Education> UserEducations { get; set; }
public DbSet<User> Users { get; set; }
}
}
您需要将Entity Framework nuget包添加到项目中以获取对DbContext类的引用。
答案 3 :(得分:0)
或使用Linq实体并连接表:
using ( var context = new YourContext)
{
var users = context.UserDbSet;
var userEdications = context.UserEdication.DbSet ;
var joinedTables = from user in users
join userEdication in userEdications on user.userId = userEdication.userId
select new OutPutEntity
{
Name = user.Name,
Edication = userEdication.Edication
}
gridView.DataSource = joinedTables.toList(); // should be placed outside the using. (here just as a sample)
}
优点 - 您可以在IQurable级别指定输出格式。下行 - 看起来很复杂。