7

假设我正在使用此示例中的图形数据库(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;
        }

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

4

2 回答 2

6

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

于 2017-10-13T17:56:22.193 回答
5

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 已关闭,当时处于非活动状态。

于 2019-06-07T06:04:15.947 回答