实体框架查询 SQL Server 2017 图形数据库的语法

Posted

技术标签:

【中文标题】实体框架查询 SQL Server 2017 图形数据库的语法【英文标题】:Syntax for Entity Framework query to SQL Server 2017 Graph database 【发布时间】:2018-03-25 19:32:55 【问题描述】:

假设我正在使用此示例 (SQL Server 2017) 中的图形数据库:

https://docs.microsoft.com/en-us/sql/relational-databases/graphs/sql-graph-sample

我有以下 SQL 查询:

-- Find Restaurants that John likes
SELECT Restaurant.name
FROM Person, likes, Restaurant
WHERE MATCH (Person-(likes)->Restaurant)
AND Person.name = 'John';

我使用 EF 6.1.3 在 C# 中创建了一个模型,它自动生成数据库中的所有类和所有内容(数据库中的 EF 设计器)。这一切都很好。我什至可以使用以下简单方法查询所有人:

public ICollection<People> ListPeople() => Entities.Peoples.ToList();

现在,如果我们回到最初的查询,我想在哪里找到 John 喜欢的餐馆……我将如何在 Entity Framework 中执行此操作?我需要使用 LINQ 查询还是可以只调用实体? (大概我不能,因为表格之间似乎没有任何物理关系,只能在边缘找到它们)

我在想类似的东西

 public ICollection<Restaurant> ListRestaurantsLikedByPerson(string personName)
        
            var result = from restaurant in Entities.Restaurants, person in Entities.Peoples, likes in Entities.likess
                where match (person - likes -> restaurant)
                and person.name = personName;

            return result;
        

但是这个语法不正确......我该如何做这个查询?

【问题讨论】:

【参考方案1】:

实体框架不支持 SQL 服务器特定的图形扩展。

【讨论】:

【参考方案2】:

David Glass 为 EntityFramework Core 提出了一个拉取请求,以便能够支持 SQL Server Graph 功能,您可以尝试使用他修改后的 EFCore 版本,看看它如何为您工作。 我也正忙于尝试使用它来处理 SQL Graph 表。

https://github.com/aspnet/EntityFrameworkCore/issues/8527 https://github.com/aspnet/EntityFrameworkCore/pull/13804

编辑: 由于最新版本 EF 内核的内部结构发生重大变化,此 PR 已关闭,当时处于非活动状态。

【讨论】:

以上是关于实体框架查询 SQL Server 2017 图形数据库的语法的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL Server Compact 4.0 在实体框架中进行 LIKE 查询

在 Microsoft SQL Server 2017 图形数据库中查询可选关系的语法?

实体框架 Code First SQL Server 视图

SQL Server 和实体框架性能改进

优化实体框架生成的 SQL Server 执行计划

如果删除 AsNoTraking,速度会更快 - 为啥? - 实体框架 5.0 - SQL Server 2008 R2