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实体.
提前致谢.
基于HasRequired和HasOptional的含义,我希望Optional#1强制执行Address,并且不允许您在不指定地址的情况下创建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
| 归档时间: |
|
| 查看次数: |
10766 次 |
| 最近记录: |