Подтвердить что ты не робот

В чем разница между HasRequired и HasOptional

У меня есть следующие сущности

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; }
    }

Если я установил связь между Employee и Address со следующим Fluent 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 всегда должна иметь адресную сущность, но это не так. Я смог сохранить объект Employee без значения адреса.

Спасибо заранее.

4b9b3361

Ответ 1

Просто основанный на значении 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