【问题标题】:linq query to get dependent data in one connection using entity framework 6使用实体框架 6 在一个连接中获取依赖数据的 linq 查询
【发布时间】:2015-03-25 06:16:55
【问题描述】:

我有以下 SQL 语句:

DECLARE @UserID INT

SELECT Col1, Col2, Col3, @UserID = UserID 
FROM Users 
WHERE UserName = <username> AND Password = <password>

SELECT Col1, Col2, Col3 
FROM ClientUser 
WHERE UserID = @UserID

上述查询中有两条select语句,一条是从UserID获取Users表中的其他列信息,第二条是根据@UserID值从另一个表中获取信息。如何在entity framework 上下文上编写linq 查询来执行此选择,而无需多次连接到数据库?

【问题讨论】:

  • 您可以使用 linq join 根据 userid 连接两个表,然后 fetch 。这样它将只使用一个 db hit

标签: c# sql-server linq entity-framework entity-framework-6


【解决方案1】:

假设您有两个类,User 和 ClientUser,它们是您的实体框架模型的一部分。它们可能看起来像这样。

public class User
{
    public int UserId { get; set; }
    public string Col1 { get; set; }
    //More to be here

    public virtual ICollection<ClientUser> Clients { get; set; }
}

public class ClientUser
{
    public int ClientId { get; set; }
    public int UserId { get; set; }

    public virtual User User {get; set;}
}

默认情况下你会使用延迟加载,因为我将它们定义为虚拟。如果您知道自己需要更多,请执行以下操作

var query = YourContext.Users.Get().Include(x => x.Clients);

然后将您需要的内容添加到查询中。通过使用“包含”,它可以确保 EF 急切地而不是懒惰地提取数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2020-08-10
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多