HasRequired和HasOptional有什么区别

Ray*_*Ray 11 entity-framework-4.1

我有以下实体

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; }
    }
Run Code Online (Sandbox Code Playgroud)

如果我使用以下Fluent API在Employee和Address之间设置关系

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

        }
Run Code Online (Sandbox Code Playgroud)

上面两个选项创建表结构完全相同,如果是这样,两个选项之间有什么不同.如果我使用选项#1,我认为Employee实体总是应该有地址实体,但事实并非如此.我能够保存没有地址值的Employee实体.

提前致谢.

Adr*_*ian 8

基于HasRequired和HasOptional的含义,我希望Optional#1强制执行A​​ddress,并且不允许您在不指定地址的情况下创建Employee,并且Option#2允许您创建具有可选地址的Employee.

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