实体框架上下文正在为我生成查询。
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]
我的表包含名为geometry的空间列。实体框架不包含几何函数。例如,这是一个几何函数:
SELECT ST_AREA(geom) FROM Cities WHERE CityID = 3
所以我不能像这样使用上下文扩展方法:
context.Cities.Where(....)
是可能的,或者有任何实体框架方法来重写几何函数。
最佳答案
你不需要覆盖任何东西。最好的办法是通过实体框架执行一个简单的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解决方案的后勤工作是他们还没有做到这一点的原因。你可以试着去做,但有一个简单得多的解决办法。