Написание отношений один-к-одному с использованием Fluent API - PullRequest
0 голосов
/ 26 декабря 2018

Как написать one-to-one--or-zero отношение, используя свободный API?Может кто-нибудь помочь мне исправить то, что я написал.Я не уверен, правильно ли это.

Сценарий: один студент может иметь один или нулевой адрес.

модель студента

    public int Id{ get; set; }
    public string Name{ get; set; }
    public Address Address{ get; set; }

модель адреса

    public int Id { get; set; }
    public string Street{ get; set; }
    public int StudentId { get; set; }

    public Student Student { get; set; }

Что я пробовал:

        builder.HasOne(u => u.Address)
        .WithOne(b => b.Student)
        .HasForeignKey<Address>(b => b.StudentId);

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Для настройки отношения one-to-zero-or-one между сущностями Студент и Адрес с помощью свободного API вы можете использовать метод HasOptional(s => s.Address), например

modelBuilder.Entity<Student>()
            .HasOptional(s => s.Address) // Address property is optional in Student entity
            .WithRequired(ad => ad.Student); // Student property is required 
0 голосов
/ 26 декабря 2018

В случае отношения one-to-one--or-zero вам не нужны дополнительные PrimaryKey вместе с ForeignKey в зависимой таблице.Primarykey таблицы Principle будет одновременно PrimaryKey и ForeignKey зависимой таблицы.

Итак, напишите свой Address класс модели следующим образом:

public class Address
{
   public int StudentId { get; set; } // Here StudentId is the PrimaryKey and ForeignKey at the same time.
   public string Street{ get; set; }

   public Student Student { get; set; }
}

Затем в конфигурации Fluent API:

public class AddressConfiguration : IEntityTypeConfiguration<Address>
{
    public void Configure(EntityTypeBuilder<Address> builder)
    {
        builder.HasKey(u => u.StudentId)
        builder.HasOne(u => u.Student)
               .WithOne(b => b.Address)
               .HasForeignKey<Address>(b => b.StudentId);
    }
}
...