其实之前还学了授权和signalr
但是TVT,我的笔记没了呜呜呜呜呜呜
数据库对此插件的安装
PostGIS教程三:创建空间数据库不睡觉的怪叔叔的博客-CSDN博客postgis教程
在abp中配置
-
entityframecore中导包
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite
-
在dbcontextfactory中配置
注意两处都要配置
var builder = new DbContextOptionsBuilder<BookStoreDbContext>() .UseNpgsql(configuration.GetConnectionString("Default"), o => o.UseNetTopologySuite());// 加上第二个参数用于postgis
-
在dbcontext中配置
首先保证数据库搞定了嗷
protected override void OnModelCreating(ModelBuilder builder) { builder.HasPostgresExtension("postgis"); }
-
写一个实体
注意类型导包NetTopologySuite
public class City { public int Id { get; set; } public string Name { get; set; } [Column(TypeName="geography")] public Point Location { get; set; } }
此特性等效于
protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<City>().Property(b => b.Location).HasColumnType("geography (point)"); }
【问题】报错500,说geometry的userdata是object不行
是配置userpngsql少写了参数
【问题】NetTopologySuite.Geometries.Point needs to have a constructor with 0 args or only optional args.
【关于如何使用AutoMapper】AutoMapper小结 - 呆河马 - 博客园 (cnblogs.com)
c# - How to automap this(mapping sub members) - Stack Overflow
【问题】1.仓储加上之后运行不出来swagger还内存疯狂上升
是因为service中不能直接用geometry当参数,必须是它的子类实例。
2.在这之后报错数字什么什么
System.Text.Json改为Newtonsoft.Json
修改json解析配置为另一个后
3.报错循环引用的问题,ReferenceLoopHandling
然后有一个特性可以解决循环引用问题(循环引用发生在return之后,最后最后的地方)
(24条消息) Newtonsoft.Json的循环引用解决方案_学而时习之-CSDN博客
解决不了,就需要写循环引用的那个东西的dto来避免循环引用。
CreateMap<Point, PointDto>().ReverseMap();// ReverseMap就是同时设置相反的
写PointDto然后配置AutoMap,最后修改返回的类型为Dto而不是entity
var entity = await _cityRepository.GetNearestCity(currentLocation); // 返回转为dto,这样在返回之后的序列化为json就不会报错 // 因为直接返回City序列化会遇到循环引用的问题 return await MapToGetOutputDtoAsync(entity);
其他注意
-
Point没有主键
-
配置AutoMap可以这样写一个用两次:
CreateMap<Point, PointDto>().ReverseMap();// ReverseMap就是同时设置相反的
-
dto的属性名一定要和实体一致,不然500。多边形传入的构造参数point需要连成一个圈(即首尾同一个点)
-
如果在service偷懒把接口和实现写在一起,一般会把接口写在上面