EF отображает две сущности с разными типами столбцов - PullRequest
0 голосов
/ 18 февраля 2020

Как лучше всего установить отношения 1: 1 между двумя объектами разных типов? В настоящее время у меня есть SQL база данных сторонних производителей, где схема настроена следующим образом:

DECLARE TABLE Car
(
    ID as int
)

DECLARE TABLE Person
(
    ID as int,
    CarId as varchar(50)
)

Итак, я сначала настроил свои модели как код

public class Car
{
    [Key, Column ("Id")]
    public int Id { get; set; }
}

public class Person
{
    [Key, Column ("Id")]
    public int Id { get; set; }

    [Column("CarId")]
    public string CarId { get; set; }

    [ForeignKey("CarId")]
    public virtual Car Car { get; set; }
}

Я не знаю, почему база данных была настроена таким образом, поэтому, очевидно, что подобная модель не работает.

Первая проблема - возможность получить CarId как int, я решил, посмотрев на эта ссылка . Я установил _carId как частную строку и еще одно свойство CarId как int, и я int.Parse данные из _carId, который прекрасно работает:

public class Car
{
    [Key, Column ("Id")]
    public int Id { get; set; }
}

public class Person
{
    [Key, Column ("Id")]
    public int Id { get; set; }

    [Column("CarId")]
    protected internal string _carId { get; set; }

    [NotMapped]
    public string CarId { get => int.Parse (_carId); set => _carId = value.ToString(); }

    [Required]
    [ForeignKey("_carId")]
    public virtual Car Car { get; set; }
}

Проблема, которую я не смог решить, заключается в том, что это Изменение все еще не может отобразить эти две сущности вместе, так что в коде я мог бы использовать его следующим образом:

    var car = _repository.GetPerson(123).Car;

Ошибка, которая возникает, такова:

Типы всех свойств в зависимой роли ссылочного ограничения должны совпадать с соответствующими типами свойств в главной роли. Тип свойства «CarId» для объекта «Person» не соответствует типу свойства «ID» для объекта «Car» в ссылочном ограничении «Person_Car».

Если я пытаюсь использовать CarId Что касается ForeignKey, то ошибка следующая:

Имя внешнего ключа 'CarId' не найдено в зависимом типе 'Person'. Значение Name должно быть разделенным запятыми списком имен свойств внешнего ключа. '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...