所以,你可以在實體建模,因此:
public DbSet<Item> ItemSet {get;set;}
public DbSet<Order> OrderSet {get;set;}
public DbSet<ItemOrder> ItemOrders {get;set;}
public class Item
{
public int Id {get;set;}
}
public class Order
{
public int Id {get;set;}
}
public class ItemOrder
{
[Key, Column(Order = 0)]
public int ItemId {get;set;}
[Key, Column(Order = 1)]
public int OrderId {get;set;}
}
所以爲了更新:
public void AddItems(int OrderId, int ItemId)
{
var itemExists = db.ItemOrders.FirstOrDefault(x => x.OrderId == OrderId && x.ItemId == ItemId);
if (itemExists != null) return;
db.ItemOrders.Add(new ItemOrder { OrderId = OrderId, ItemId = ItemId });
db.SaveChanges();
}
然後你可以使用LINQ .Join()
進行查詢,並且非常簡單。
爲了完整起見,OP提到導航屬性現在已經消失。所以,如果你知道OrderId
,那麼你可以簡單的做:
var items = db.ItemOrders.GroupJoin(
db.ItemSet,
io => io.ItemId,
i => i.Id,
(itemOrder, items) => items)
.ToList();
因此,要通過走你,GroupJoin
請求的數據要加入對IQueryable
/IEnumerable
。
第二個參數是初始數據集的字段,即ItemOrders
您要加入的集合。
第三個參數是要加入的集合的字段,即ItemSet
。
第fouth參數基本上是Select
,在那裏您會看到大約(ItemOrder itemInFirstSet, IEnumerable<Item> itemsThatAreJoined)
的Func
簽名。
您可以將相同的邏輯應用於LINQ Join
擴展。但不是itemsThatAreJoined
它是itemThatIsJoined
。所以區別是GroupJoin
會找到匹配的多個實體,Join
只會找到一個。
這是沒有辦法的詳細說明,更多的概述
如果你希望能夠到的,你需要的加入表中的代碼模型!那樣你就可以對這些實體的創建進行更精細的紋理控制 –