c# - 实体框架 mvc 如何使用内部联接?
问题描述
我正在尝试使用 DevExpress mvc 开发一个项目。我使用实体框架进行数据库连接。我想要做的是将两个表与 c 表中的 companyId 和 k 表中的 guId 结合起来
我想做的事; https://ekitapdfindir.com/istek.png
我的索引视图;
@(Html.DevExtreme().DataGrid<plate_logs>()
.ShowBorders(true)
.DataSource(d => d.WebApi().Controller("PlateLogs").Key("Guid"))
.Columns(columns =>
{
columns.AddFor(m => m.Guid).Width(100);
columns.AddFor(m => m.LastUpdateDate).Width(90);
// Columns Location ID
columns.AddFor(m => m.LocationId)
.Lookup(lookup =>
lookup
.DataSource(d => d.WebApi()
.Controller("Locations")
.LoadAction("Get")
.Key("adsad"))
.DisplayExpr("Name")
.ValueExpr("Guid"));
// Columns Gate ID
columns.AddFor(m=>m.GateId)
.Lookup(lookup => lookup
.DataSource(d => d.WebApi()
.Controller("Gates")
.LoadAction("Get")
.Key("GateId"))
.DisplayExpr("Name")
.ValueExpr("Guid"));
// Columns Departmant ID
columns.AddFor(m => m.DepartmentId)
.Lookup(lookup => lookup
.DataSource(d => d.WebApi()
.Controller("Departments")
.LoadAction("Get")
.Key("DepartmentId"))
.DisplayExpr("Name")
.ValueExpr("Guid"));
// Columns Driver ID
columns.AddFor(m => m.DriverId)
.Lookup(lookup => lookup
.DataSource(d => d.WebApi()
.Controller("Driver")
.LoadAction("Get")
.Key("DriverId"))
.DisplayExpr("FullName")
.ValueExpr("Guid"));
// Columns Company ID
columns.AddFor(m => m.DriverId)
.Lookup(lookup => lookup
.DataSource(d => d.WebApi()
.Controller("Driver")
.LoadAction("Gets"))
.DisplayExpr("Name")
.ValueExpr("Guid"));
})
.Paging(p => p.PageSize(20))
)
)
我的驱动控制器;
LCWCENTEREntities db = new LCWCENTEREntities();
[HttpGet]
public HttpResponseMessage Get(DataSourceLoadOptions loadOptions)
{
var model = db.driver.ToList();
return Request.CreateResponse(DataSourceLoader.Load(model, loadOptions));
}
[HttpGet]
public HttpResponseMessage Gets(DataSourceLoadOptions loadOptions)
{
var sorgu = from d in db.driver
join c in db.company
on d.CompanyId equals c.Guid
select new {d,c };
return Request.CreateResponse(DataSourceLoader.Load(sorgu, loadOptions));
}
获取操作将驱动程序表连接到公司表并将数据发送到查看器
编辑
我的 plate_log 表;
public partial class plate_logs
{
public int Id { get; set; }
public long Guid { get; set; }
public string Plate { get; set; }
public Nullable<long> DriverId { get; set; }
public Nullable<System.DateTime> LastUpdateDate { get; set; }
public Nullable<byte> isRemoved { get; set; }
}
驱动程序表;
public partial class driver
{
public int Id { get; set; }
public long Guid { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string FullName { get; set; }
public Nullable<long> CompanyId { get; set; }
public Nullable<byte> isRemoved { get; set; }
}
和公司表;
public partial class company
{
public short Id { get; set; }
public long Guid { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public Nullable<short> isSync { get; set; }
public Nullable<System.DateTime> LastUpdateDate { get; set; }
public Nullable<byte> isRemoved { get; set; }
}
解决方案
如果您将Eager Loading与该Include
方法一起使用,那么您想要实现的目标很容易。更多信息可以在这里找到。
这会在后台自动生成 LINQ,从而将表连同其请求的相关表带入请求中。从我在您的模型中看到的情况来看,我认为您还需要在表之间提供导航属性以定义它们的关系。
所以一个例子就像:
楷模
public class A
{
public int PropertyA {get; set;}
public B B {get; set;}
}
public class B
{
public int PropertyB {get; set;}
public A A {get; set;}
}
在控制器中,您现在需要使用 Include() 调用 LINQ 方法,例如
控制器
context_variable.A.Include(x => x.B).ToList();
我希望这对您有所帮助,并且足够解释。
推荐阅读
- azure - 仅来自某些 AppService 的 Azure 存储访问缓慢
- microsoft-teams - 如何拨打电话:适用于自适应卡
- java - 从选择对象设置选项
- apache-spark - java.lang.ClassNotFoundException:找不到类 com.amazon.ws.emr.hadoop.fs.EmrFileSystem
- java - 使用 downloadtask 下载多个 url
- java - 在某些按钮上随机放置文本
- java - REST API:服务中的字段存储库需要一个名为“entityManagerFactory”的 bean,但无法找到
- javascript - 如何使用“数据:文本/纯文本”打印井号?
- heroku - 在带有 .htpasswd 命令的 heroku CLI 中,输入的密码未显示
- ruby - 用户电子邮件为零(Octokit Github API)