Как отобразить точку в структуре сущности? - PullRequest
0 голосов
/ 05 мая 2020

Я разрабатываю API в ядре. net и использую сущность Framework.

Мой банк уже существует, и в одной из таблиц у меня есть поле типа Point для хранения координат (Spatials).

Я не использую какой-либо автоматический c подход (например: сначала код, сначала база данных ...), я сам моделирую свои классы.

Чтобы сопоставить это поле точки, я сделал это, как и в примитивных типах, я считаю ошибочным, и я получаю сообщение об ошибке:

System.InvalidOperationException: 'Свойство' Address.LatLong 'не может быть отображено, потому что оно имеет тип Point, который не является поддерживаемым примитивным типом или допустимым типом объекта. Либо явно сопоставьте это свойство, либо проигнорируйте его с помощью атрибута «[NotMapped]» или с помощью EntityTypeBuilder.Ignore в «OnModelCreating».

public class Address:BaseModel
    {

        [Required]
        [StringLength(30)]
        public string Street { get; set; }
        [Required]
        public int Number { get; set; }

        [StringLength(45)]
        public string Observation { get; set; }

        [Required]
        [StringLength(20)]
        public string PostalCode { get; set; }

        [ForeignKey(nameof(City))]
        [Required]
        public int CityId { get; set; }
        public virtual City City { get; set; }

        public Point LatLong { get; set; } //this is the field

    }

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

, если вы хотите использовать эту точку для другого адреса, вы должны добавить что-то вроде этого в свой класс точки:

public virtual ICollection<Address> Address{ get; set; }

, и если вы не хотите использовать эту точку для другого адреса, вы можете указать Lat и Long к вашему классу адреса.

кстати, я думаю, что добавление этого public virtual ICollection<Address> Address{ get; set; } должно решить вашу проблему

0 голосов
/ 05 мая 2020

Предполагая, что вы хотите сопоставить Point.X и Point.Y с 2 столбцами в той же таблице, просто добавьте 2 свойства, а затем игнорируемое свойство для LatLog. Используйте метод получения / установки, который устанавливает или возвращает значения в новую точку. Это был бы самый простой способ решить эту проблему.

public class Address:BaseModel
{
    /* Other members removed for brevity */

    public int Lat { get; set; }
    public int Long { get; set; }

    [NotMapped]
    public Point LatLong { get { return new Point(Lat, Long); } set { this.Lat = value.X; this.Long = value.Y; } }
}
...