您可以使用Microsoft.Spatial
爲geography
和geometry
空間操作。
OFC,EntityframeworkCore
不支持空間,這樣你就不能創建在codefirst地理數據類型的字段,我建議你做這個用純SQL讚揚直到EntityframeworkCore
支持在2017年第二季度(See this)空間。如果你不知道我會怎麼告訴你的。
所有你需要添加一個字段與地理數據類型, 所以你需要在遷移補課的一個運行此表彰的第一:如果您使用的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
請記住!你應該選擇除地理數據類型的字段以外的所有記錄!
可能的複製。 (空間數據 - 地理)](https://stackoverflow.com/questions/44873740/entity-framework-core-type-udt-is-not-supported-on-this-platform-spatial-data) – Eli