今、あなたはgeography
とgeometry
空間操作のためのMicrosoft.Spatial
を使用することができます。 EntityframeworkCore
はQ2 2017(See this)の空間をサポートするまで
OFC、あなたがcodefirstで地理データ型でフィールドを作成することはできませんのでEntityframeworkCore
は、空間的なサポートしていない、私はあなたが純粋なSQLでこれを行うことをお勧めは表彰します。もしあなたが私にあなたにどのように伝えるのか分からなければ。
あなたが ので、あなたは、移行までのクラスの一つにこの称賛を実行する必要があり、地理データ型でフィールドを追加するために必要なすべての
まず:あなたはUnitOfWorkのあなたを使用している場合
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("ALTER TABLE [dbo].[Cities] ADD [Location] geography");
}
-
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);
}
そして今、あなたは近くの都市を検索する場合、あなたはこのCを使用することができます:あなたはこのようなレコードを挿入した後、[場所]フィールドを更新することができますommend:
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.Tehran
2.Ankara
3.Paris
4.Washington DC
覚えておいてください!地理データ型のフィールド以外のすべてのレコードを選択する必要があります。
可能な重複:タイプUDTは、このプラットフォームではサポートされていません。 (空間データ - 地理)](https://stackoverflow.com/questions/44873740/entity-framework-core-type-udt-is-not-supported-on-this-platform-spatial-data) – Eli