假设我正在使用此示例(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#中创建了一个Model,它自动生成数据库中的所有类和所有内容(EF Designer来自数据库)。一切正常。我甚至可以使用一个简单的方法查询所有人:
public ICollection<People> ListPeople() => Entities.Peoples.ToList();
现在,如果我们回到原始查询,我想找到John喜欢的餐馆......我将如何在实体框架中执行此操作?我需要使用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;
}
但是这种语法不正确......我该怎么做这个查询?
答案 0 :(得分:3)
实体框架不支持特定于SQL Server的图表扩展。
答案 1 :(得分:1)
David Glass提出了对 EntityFramework Core 的拉动请求,以便能够支持SQL Server Graph功能,您可以尝试使用他的EFCore修改版,然后查看它的工作方式。 我正忙于尝试将其用于SQL Graph表。
https://github.com/aspnet/EntityFrameworkCore/issues/8527 https://github.com/aspnet/EntityFrameworkCore/pull/13804
答案 2 :(得分:-1)
您可以使用Microsoft的Cosmos DB API访问SQL Server 2017中的Graph表功能。 这是link