Как определить отношение «один к одному» с ограничением, используя Fluent API - PullRequest
0 голосов
/ 30 мая 2018

У меня есть две таблицы как следующие

public class Person {
[Key]
public int Id { get; set;}
public string Name {get; set;}
}

и

public class Office {
[key]
public int OfficeId {get; set;}
public string OfficeName { get; set;}
public virtual ICollection<Person> Persons { get; set;}
}

Теперь я хочу отношения в третьей таблице, такие как

[PersonHasOffice]
|  PersonId     | OfficeId   |

, такие, чтоу пользователя может быть только один офис или нет .Когда я пробую следующее, сгенерированные отношения - это многие ко многим!

modelBuilder.Entities<Office>
.HasMany(e=>e.Persons)
.WithMany()
.Map(m=>m.ToTable("PersonHasOffice").MapLeftKey("OfficeId").MapRightKey("Id"));

Как получить отношение один-к-одному-на-стороне со стороны человека, чтобы у человека был офис или его нет.

1 Ответ

0 голосов
/ 30 мая 2018

Вместо использования дополнительной таблицы сопоставления, вы можете добавить обнуляемый столбец OfficeId в качестве внешнего ключа в таблице Person.

public class Person 
{
    [Key]
    public int Id { get; set;}
    public string Name {get; set;}

   [ForeignKey("OfficeId")]
   public virtual Office  Office  {get;set;}
   public int? Office Id {get;set;} = null;
}

Добавьте это изменение в класс Person, затем выполните Add-Migration <MigrationName> и запустите Update-Database из консоли диспетчера пакетов.

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