В чем разница между HasRequired и HasOptional - PullRequest
11 голосов
/ 15 сентября 2011

У меня есть следующие объекты

public class SchoolContext : DbContext
    {
        public DbSet<Address> Addresses { get; set; }
        public DbSet<Employee> Employees { get; set; }     
    }

    public class Address
    {
        public int Id { get; set; }
        public string Street { get; set; }

        public virtual Employee Employee { get; set; }
    }

    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public virtual Address Address { get; set; }
    }

Если я установлю связь между Сотрудником и Адресом с помощью следующего Свободного API

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // Option #1
            modelBuilder.Entity<Employee>()
                        .HasRequired(s => s.Address)
                        .WithRequiredPrincipal(a => a.Employee);

            // Option #2
            modelBuilder.Entity<Employee>()
                        .HasOptional(s => s.Address)
                        .WithRequired(a => a.Employee);

        }

Приведенные выше два параметра создают структуру таблицы точно такой же, если так, то, что отличается между двумя параметрами. Если я выбрал вариант № 1, я думал, что сущность Employee всегда должна иметь адресную сущность, но это не так. Мне удалось сохранить сущность Сотрудника без значения адреса.

Заранее спасибо.

1 Ответ

8 голосов
/ 22 ноября 2011

Исходя из значения HasRequired и HasOptional, я ожидал бы, что Факультативный # 1 принудительно применяет Адрес и не позволяет вам создать Сотрудника без указания адреса, а вариант № 2 позволяет вам создать Сотрудника снеобязательный адрес.

HasRequired
Настраивает обязательные отношения для этого типа объекта.Экземпляры типа сущности не смогут быть сохранены в базе данных, если не указано это отношение.Внешний ключ в базе данных не обнуляется.

HasOptional
Настраивает необязательные отношения для этого типа сущности.Экземпляры типа сущности смогут быть сохранены в базе данных без указания этой связи.Внешний ключ в базе данных обнуляется.

http://msdn.microsoft.com/en-us/library/gg671317%28v=vs.103%29.aspx
http://msdn.microsoft.com/en-us/library/gg671230%28v=vs.103%29.aspx

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