Web フォームを ASP.NET MVC から ASP.NET Core MVC に移行しようとしています。現在、次のものを置き換える方法を探しています:
using System.Data.Entity.Spatial;
現時点では .NET Core では利用できないため、見つけられなかった可能性があります。
このパッケージを組み込む方法はありますか? NuGet パッケージ経由で組み込むことは可能でしょうか?
Ps. Microsoft のガイドラインを簡単に読みましたが、関連するものは見つかりませんでした。同様の状況にある人のために、ガイドを次に示します。https://docs.asp.net/en/latest/migration/mvc.html
(良い質問を書けなかったらごめんなさい。ここのシステムに慣れようとしているところです)
ベストアンサー1
編集
この機能はEF Core 2.2の新機能です
空間データがEF Core 2.2に追加されました(ドキュメントを参照)
EF Core 2.2 より前のバージョンでは、以下を使用します。
Microsoft.Spatial
これで、 forgeography
およびgeometry
空間演算を使用できるようになりました。
もちろん、EntityframeworkCore
空間をサポートしていないため、コードファーストで地理データ型のフィールドを作成することはできません。EntityframeworkCore
2017年第2四半期に空間をサポートするまで、純粋なSQLコマンドでこれを行うことをお勧めします(これを見て)。方法が分からない場合はお教えします。
まず、地理データ型のフィールドを追加する必要があるため、移行の上位クラスの 1 つでこのコマンドを実行する必要があります。
protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.Sql("ALTER TABLE [dbo].[Cities] ADD [Location] geography"); }
UnitOfWork を使用している場合は、次のようにレコードを挿入した後に Location フィールドを更新できます。
try { City city = new City { Title = creator.Title }; _cities.Add(city); _uow.ExecuteSqlCommand("UPDATE Cities SET Location = geography::STPointFromText('POINT(' + CAST({0} AS VARCHAR(20)) + ' ' + CAST({1} AS VARCHAR(20)) + ')', 4326) WHERE(ID = {2})", city.Longitude, city.Latitude, city.ID); return RedirectToAction("Index"); } catch { return View(creator); }
近くの都市を見つけたい場合は、次のコマンドを使用できます:
var cities = _uow.Set<City>() .FromSql(@"DECLARE @g geography = geography::STPointFromText('POINT(' + CAST({0} AS VARCHAR(20)) + ' ' + CAST({1} AS VARCHAR(20)) + ')', 4326); Select ID, Address, CreationDate, CreationDateInPersian, CreationDateStandard, CreatorRealName, CreatorUserID, ExLanguageID, IsActive, IsDeleted, Latitude, Longitude, ModifierRealName, ModifierUserID, ModifyDate, ModifyDateInPersian, ModifyDateStandard, PhoneNumbers, Summary, TimeStamp, Title, Image from Cities ORDER BY Location.STDistance(@g) DESC;", 35.738083, 51.591263) .Select(x => new AllRecordsViewModel { ID = x.ID, Title = x.Title }) .ToList(); return View(cities);
// 最も近い都市の結果:
1.テヘラン
2.アンカラ
3.パリ
4.ワシントンDC
覚えておいてください! 地理データ タイプのフィールドを除くすべてのレコードを選択する必要があります。