Я использую Fluent API для создания отношения один-к-одному или нуля, и в первом случае
Менеджер - ContactDetails работает, но во втором случае представитель - ContactDetails это не работает Но конфигурация такая же.
Насколько я понимаю, в отношениях один к одному / нулю один из двух классов должен определять ключ как primary и foreignKey, чтобы было известно, какой класс является зависимым. И, например, идентификатор в ContactDetails не может быть ForeignKey для таблицы представителя и менеджера одновременно? Вот почему Представитель_Id создается автоматически? Но почему это отношение считается одним ко многим?
![enter image description here](https://i.stack.imgur.com/PAxAV.png)
Управляющий класс:
[Table("Manager")]
public class Manager
{
[Key]
[ForeignKey("ApplicationUser")]
public string Id { get; set; }
[Required]
[MaxLength(100)]
public string Name { get; set; }
public virtual ContactDetail ContactDetail { get; set; }
[JsonIgnore]
public virtual ICollection<Client> Clients { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
}
Представительский класс:
[Table("Representative")]
public class Representative
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(99)]
public string Name { get; set; }
[Required]
public int ClientId { get; set; }
[JsonIgnore]
public virtual Client Client{ get; set; }
public virtual ContactDetail ContactDetail {get; set; }
}
Класс ContactDetail:
public class ContactDetail
{
[Key]
public string Id { get; set; }
[Required]
[MaxLength(100)]
public string FirstName { get; set; }
[MaxLength(100)]
public string SecondName { get; set; }
[MaxLength(100)]
public string LastName { get; set; }
[JsonIgnore]
public virtual Manager Manager { get; set; }
[JsonIgnore]
public virtual Representative Representative { get; set; }
}
Метод переопределения в контексте:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Manager>()
.HasOptional(m => m.ContactDetail)
.WithRequired(ad => ad.Manager);
modelBuilder.Entity<Representative>()
.HasOptional(c => c.ContactDetail)
.WithRequired(ad => ad.Representative);
base.OnModelCreating(modelBuilder);
}