c# - 我可以覆盖 Entity Framework 查询生成器吗?

标签 c# entity-framework gis geospatial

Entity Framework 上下文正在为我生成查询。

var query = from c in context.Cities where c.CityID == 3 select c;
var objectQuery=query as System.Data.Objects.ObjectQuery;
Console.WriteLine(objectQuery.ToTraceString());

这会输出以下字符串:

SELECT
[Extent1].[CityID] AS [CityID],
[Extent1].[geom] AS [geom],
[Extent1].[Name] AS [Name],
FROM [dbo].[Cities] AS [Extent1]
WHERE 3 = [Extent1].[CityID]

我的表格包含名为几何的空间列。 Entity Framework 不包含几何函数。例如,这是一个几何函数:

SELECT ST_AREA(geom) FROM Cities WHERE CityID = 3

所以我不能像这样使用上下文扩展方法:

context.Cities.Where(....)

可以,或者有没有 Entity Framework 的方法可以覆盖几何函数。

最佳答案

您不需要覆盖任何内容。您最好的选择是通过 Entity Framework 执行一个普通的 SQL 查询并让它返回您填充的对象。

// Add in whatever spatial stuff you need here.
var sql = "SELECT * FROM Cities WHERE CityId = {0} AND ...";

// Add whatever other parameters you need to the rest of the parameters.
var cities = context.Database.SqlQuery<City>(sql, cityId, ...);

它不像使用 LINQ 那样“干净”,但我认为实现打包到 EF 中的 LINQ to Entities 解决方案的后勤工作是他们尚未这样做的原因。您可以尝试这样做,但有一个更简单的解决方案。

关于c# - 我可以覆盖 Entity Framework 查询生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28765692/

相关文章:

c# - 从 DataReader 填充多个数据表。有可能吗?

c# - 将委托(delegate)与 OR 运算符组合

c# - 从多个表中选择最大日期

json - Topojson:v0 和 v1 之间的差异列表?

c# - Unity OnCollisionEnter 不起作用

c# - 如何对 MVC ASP.Net 返回正确的 View 进行单元测试?

c# - 如何将 EF 属性转换为 SQL Server 的计算列?

c# - 使用 Entity Framework 添加具有读/写操作和 View 的 Controller - "Data Context class"是什么?

python - 我有一个有 4 个角的多边形,而不是正方形。如何在 python 中获取它的较小部分的纬度和经度?

gis - 开源 map