Как лучше всего установить отношения 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 должно быть разделенным запятыми списком имен свойств внешнего ключа. '