我很困惑。我正在使用EF CORE。我希望旧的实体框架中的其他人能够发生这种情况。
我遇到了一个问题,我提供的不同的邮政编码转换为lat longs。
@gLat nvarchar(50),
@gLong nvarchar(50)
DECLARE @Location geography = geography::Point(@gLat, @gLong,4326)
然而“距离”字段返回相同的距离。
cast(@Location.STDistance(Location) / 1609.344 AS float) AS 'Distance'
--Always returns the same distance AS THE LAST QUERY when back in C#
例如)如果给出邮政编码 XXXXXX0 ,则返回的距离为1.5 如果使用邮政编码调用新查询 YYYYYY1 ,返回的距离仍为1.5 .......
我想知道一开始是不是因为范围,而是设置为AddScope,这意味着为每个请求创建一个新的上下文。
services.AddScoped<IRepository, Repository>();
答案 0 :(得分:1)
我找到了解决问题的方法。
事实证明,我在startup.cs中的服务是AddSingleton。
services.AddSingleton<IPersonService, PersonService>(); //Needs to be AddScoped
services.AddSingleton<IPersonRepository, PersonRepository>(); //Also needs to be AddScoped
这不会起作用,因为singleton只会被创建一次,并且对于每个http请求都是相同的实例。
我们需要的是每个http请求的新实例。
另外,请确保服务的范围与存储库相同。
如果不正确,请对此作出任何修改!
希望这有助于=)