如何实现实体框架代码先加入
本文关键字:代码 框架 实体 何实现 实现 | 更新日期: 2023-09-27 18:18:37
我开始使用实体框架代码第一。
假设有这样的POCO(最终简化):public class BortStructure
{
public Guid Id { get; set; }
public String Name { get; set; }
}
public class Slot
{
public Guid Id { get; set; }
public String Name { get; set; }
public BortStructure { get; set; }
}
public class SystemType
{
public Guid Id { get; set; }
public String Name {get; set; }
}
public class SlotSystemType
{
public Guid Id { get; set; }
public Slot Slot { get; set; }
public SystemType SystemType {get; set; }
}
和上下文
public MyContext : DbContext
{
public DbSet<BortStructure> BortStructures { get; set; }
public DbSet<Slot> Slots{ get; set; }
public DbSet<SystemType> SystemTypes { get; set; }
public DbSet<SlotSystemType> SlotSystemTypes { get; set; }
}
我有一个任务,通过Id获得BortStructure与附加插槽列表,每个与附加的systemTypes列表。
使用SQL允许我用一些JOIN来做:
SELECT BortStructures.Id, BortStructures.Name, Slots.Id,
Slots.Name, SystemType.Id, SystemType.Name FROM
((BortStructures LEFT JOIN Slots ON BortStructures.Id = Slots.BortStructureId)
LEFT JOIN SlotSystemTypes ON SlotSystemTypes.SlotId = Slots.Id)
LEFT JOIN SystemTypes ON SystemTypes.Id = SlotSystemTypes.SystemTypeId
WHERE BortStructures.Id='XXXXXX' ORDER BY Slots.Id, SystemType.Id
但是使用实体框架代码优先,我不知道如何做到这一点。
如果我使用
var slotSystemTypes = from sl in MyContext.SlotSystemTypes
where sl.Slot.BortStructure.Id = XXXXXX
orderby sl.Slot.Id, sl.SystemType.Id
select sl;
当然,如果BortStructure没有包含任何Slots/Slots而没有附加任何SystemTypes,那么i将不会收到任何信息。
而不是获得BortStructure与插槽的空列表/插槽,每个与SystemTypes的空列表附加,因为我期望得到。
是否有办法存档,与单个 LINQ查询我的数据库配置?
您可以使用join
运算符示例:
string[] categories = new string[]{
"Beverages",
"Condiments",
"Vegetables",
"Dairy Products",
"Seafood" };
List<Product> products = GetProductList();
var q =
from c in categories
join p in products on c equals p.Category
select new { Category = c, p.ProductName };
foreach (var v in q)
{
Console.WriteLine(v.ProductName + ": " + v.Category);
}
更多示例见:http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9