gpt4 book ai didi

entity-framework - 在同一个查询中使用 .Find() 和 .Include()

转载 作者:行者123 更新时间:2023-12-03 08:48:20 26 4
gpt4 key购买 nike

我从带有存储库的脚手架模板自动生成了以下方法:-

public Group Find(int id)
{
return context.Groups.Find(id);
}

但是由于 Groups 对象有两个我需要的导航属性,所以我想包括 .Include ,所以我替换了 .find.where :-
public Group Find(int id)
{
return context.Groups.Where(c=>c.GroupID==id)
.Include(a => a.UserGroups)
.Include(a2 => a2.SecurityRoles)
.SingleOrDefault();
}

但我的问题是如何应用 .Include.find()而不是使用 .Where() ?

最佳答案

我只是在想 find 实际上做了什么。 @lazyberezovsky 是对的 include 和 find 不能一起使用 .我认为这是非常刻意的,原因如下:

The Find method on DbSet uses the primary key value to attempt to find an entity tracked by the context. If the entity is not found in the context then a query will be sent to the database to find the entity there. Null is returned if the entity is not found in the context or in the database.

Find is different from using a query in two significant ways:

  • A round-trip to the database will only be made if the entity with the given key is not found in the context.
  • Find will return entities that are in the Added state. That is, Find will return entities that have been added to the context but have not yet been saved to the database.


(来自 http://msdn.microsoft.com/en-us/data/jj573936.aspx)

因为 find 是一种优化方法,它可以避免需要访问服务器。如果您已经跟踪了实体,这很好,因为 EF 可以更快地返回它。

然而,如果它不仅仅是我们所追求的这个实体(例如,我们想要包含一些额外的数据),则无法知道这些数据是否已经从服务器加载。虽然 EF 可能会结合连接进行这种优化,但它在对数据库状态进行假设时很容易出错。

我认为 include 和 find 不能一起使用是一个非常深思熟虑的决定,以确保数据完整性和不必要的复杂性。它更干净、更简单
当您想要进行连接时,始终转到数据库执行该连接。

关于entity-framework - 在同一个查询中使用 .Find() 和 .Include(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com