存储过程返回旧数据

时间:2017-01-17 19:12:27

标签: asp.net-mvc entity-framework stored-procedures geolocation asp.net-core

我很困惑。我正在使用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>();

1 个答案:

答案 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请求的新实例。

另外,请确保服务的范围与存储库相同。

有关详情,请访问此页面What is the difference between services.AddTransient, service.AddScope and service.AddSingleton methods in Asp.Net Core 1?

如果不正确,请对此作出任何修改!

希望这有助于=)