#c# #entity-framework-core #ef-core-5.0
Вопрос:
У меня есть модель, которая выглядит так:
public class Foo
{
public long Id { get; set; }
public long? BarId { get; set; }
public virtual Bar? Bar { get; set; }
}
public class Bar
{
public long Id { get; set; }
public virtual Foo? Foo { get; set;}
// This would be easy, but I want a one to one relation
// public virtual ICollection<Foo> Foos { get; set; } = new HashSet<Foo>();
}
Теперь я хочу настроить отношения «один к одному».
Сложность заключается в том, что Bar.Id
может иметь значение, которого нет в Foo.BarId
столбце.
Так что это должно быть возможно
Фу
ID | БарИд |
---|---|
1 | 3 |
2 | нулевой |
Бар
ID |
---|
3 |
4 (нет Фу.БарИд, который соответствует) |
Как я могу достичь этого, используя аннотации данных или плавную конфигурацию?
Ответ №1:
просто попробуйте это
public class Foo
{
[Key]
public long Id { get; set; }
public long? BarId { get; set; }
[ForeignKey(nameof(BarId))]
[InverseProperty("Foo")]
public virtual Bar Bar { get; set; }
}
public class Bar
{
[Key]
public long Id { get; set; }
[InverseProperty("Bar")]
public virtual Foo Foo { get; set;}
}
но если вы используете net5 , вам, возможно, не нужны никакие атрибуты или свободные API