EF Code First - свободный API (WithRequiredDependent и WithRequiredPrincipal) - PullRequest
8 голосов
/ 12 октября 2011

У меня есть следующий класс:

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Couple Couple { get; set; }
}

public class Couple
{
    public Guid Id { get; set; }
    public User Groom { get; set; }
    public User Bride { get; set; }
}

Важные моменты:

  1. Bride и Groom свойстватребуется
  2. Отношение один-к-одному
  3. В классе User оно Couple требуется

DbContext в OnModelCreating

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredPrincipal();
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent();

Но я не могу быть обязательным!

Все поля с нулем в базе данных!.

Как получить поля в базе данных как нетноль? Если возможно, используя API Flient .

1 Ответ

5 голосов
/ 25 апреля 2013

Должно быть так:

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent();

Как работает WithRequiredDependent : конфигурирует требуемое отношение: требуется без свойства навигации на другой стороне отношения.Настраиваемый тип сущности будет зависимым и будет содержать внешний ключ для принципала.Тип сущности, на который нацелены отношения, будет основным в отношении.


Значение : рассмотрим вашу первую строку кода здесь.Он создает внешний ключ в настраиваемом объекте ( Пользователь ), делая его Зависимым и делая другую сторону отношения ( Пара ) Принципал


Важно: Не думаете ли вы, что конфигурация, которую вы хотите, приведет к тупику?Я не тестировал приведенный выше код, но эта конфигурация кажется для меня тупиковой, поэтому я не уверен, что EF позволит вам ее создать.Пользователю должна быть нужна Пара, а я думаю, что для этого Пара нужна тому же пользователю.

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