【问题标题】:EF Query with multiple contexts具有多个上下文的 EF 查询
【发布时间】:2012-05-05 07:56:02
【问题描述】:
我有两个 EF 上下文 _inventoryContext 和 _auctionContext。
_inventoryContext 有一个名为 Items 的属性,_auctionContext 有一个名为 Auctions 的属性。 Items 是 Item 对象的集合,每个对象都包含一个用于唯一标识它们的 Guid。 Auctions 属性是 Auction 对象的集合,每个对象都包含一个 Guid InventoryReference,它引用 Items 的元素之一。
我想做的是获取不属于拍卖的所有库存物品的清单。我该怎么做?
【问题讨论】:
标签:
c#
entity-framework-4
【解决方案1】:
This可能对你有帮助。
或者,您可以分两步执行此操作:首先从您的拍卖中获取 GuidReference 集合,然后获取其 Guid 包含在集合中的项目。由于额外的查询以及框架需要分配 Guid 集合,性能会受到影响。但根据 Item 集合的大小,这对您来说可能没什么大不了的。
另一种可能性是在一个数据库/上下文中创建一个视图,从另一个数据库/上下文中提取数据。但是,这将是只读的。
【解决方案2】:
EF Core 中有更好的解决方案
您可以在上下文之一中创建名为 Auctions 的视图,并在代码中映射 DbSet 模型。因此,您可以在另一个上下文中使用其他上下文模型和表。但是您必须确保您的 db 用户可以访问这两个上下文。
例如在 _inventoryContext 中你可以这样定义。
public virtual DbSet<Auction> Auctions { get; set; }
modelBuilder.Entity<Auction>(entity =>
{
entity.ToView("vwAuctions");
}
它为您提供了类似的东西
var result= from x in _inventoryContext.InventoryReference
join y in _inventoryContext.Auctions on x.Id equals y.InvRef
select x;