0

私は非常に混乱しています。私はEF COREを使用しています。私はこれが古いEntity Frameworksの他の人にとって起こったと思っています。ストアドプロシージャは古いデータを返します

私は、異なるポストコードをlat longに変換する問題を抱えています。

@gLat nvarchar(50), 
@gLong nvarchar(50) 

DECLARE @Location geography = geography::Point(@gLat, @gLong,4326) 

ただし、「距離」フィールドは同じ距離を返しています。郵便番号XXXXXX0が指定された場合、新しいクエリが郵便番号 YYYYYY1で呼び出された場合

cast(@Location.STDistance(Location)/1609.344 AS float) AS 'Distance' 
--Always returns the same distance AS THE LAST QUERY when back in C# 

など)、返された距離は1.5 、返された距離はまだ1.5です.......

最初はスコープが原因だったのだろうかと思っていましたが、AddScopeに設定されています。つまり、新しい要求が各要求に対して作成されます。

services.AddScoped<IRepository, Repository>(); 

答えて

1

私の問題の解決策が見つかりました。

私のサービスは、startup.csのAddSingletonでした。

services.AddSingleton<IPersonService, PersonService>(); //Needs to be AddScoped 
services.AddSingleton<IPersonRepository, PersonRepository>(); //Also needs to be AddScoped 

シングルトンは一度しか作成されず、すべてのhttp要求に対して同じインスタンスになるため、これは機能しません。

私たちに必要なのは、すべてのhttp要求の新しいインスタンスです。

また、サービスのスコープがリポジトリと同じであることを確認してください。詳細については

あなたはそれがすべて正しいない場合は、これに任意の修正を行ってください。このページWhat is the difference between services.AddTransient, service.AddScope and service.AddSingleton methods in Asp.Net Core 1?

に行くことができます!

希望するもの=)

関連する問題