加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – ASP.NET Core中的System.Data.Entity.Spatial替

发布时间:2020-12-16 00:16:06 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试将一个webform从ASP.NET MVC迁移到ASP.NET Core MVC.目前我正试图找到一种替代方法: using System.Data.Entity.Spatial; 因为它目前在.NET Core中不可用,或者我可能无法找到它. 有没有办法包括这个包?也许通过NuGet包? PS.我简要阅读了Microsof
我正在尝试将一个webform从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

(对不起,如果我写不出一个好问题,我想在这里习惯这个系统)

解决方法

现在,您可以将Microsoft.Spatial用于地理和几何空间操作.

ofc,EntityframeworkCore不支持空间,所以你不能在codefirst中创建一个具有地理数据类型的字段,我建议你使用纯SQL表示这一点,直到EntityframeworkCore在2017年第二季度(See this)支持空间.如果你不知道我会怎么告诉你.

>首先,您需要添加一个具有地理数据类型的字段,
所以你需要在一个迁移类中运行这个推荐:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("ALTER TABLE [dbo].[Cities] ADD [Location] geography");
}

>如果您正在使用UnitOfWork,则可以在插入如下记录后更新“位置”字段:

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);

// result for nearest cities :

1.Tehran
2.Ankara
3.Paris
4.Washington DC

记得!你应该选择除具有地理数据类型的字段以外的所有记录!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读