我试图在两个实体之间定义1:1的关系。我意识到这在SQL中是不可能的,但是根据我的理解,EF应该能够在允许持久化到数据库之前对内存中的实体强制执行此约束。我在Context类中有以下代码:
modelBuilder.Entity<Dependent>()
.HasRequired(x => x.Principal)
.WithRequiredDependent()
但是,EF很乐意允许我在不抛出异常的情况下执行以下操作:
context.Dependents.Add(new Dependent()
{
Principle = null
});
context.SaveChanges();
HasRequired
的方法定义如下:
从此实体类型配置所需的关系。实例 除非,实体类型将无法保存到数据库中 这种关系是指定的。数据库中的外键会 是不可空的。
我在这里缺少什么?
编辑:这是发生意外行为的具体示例:
模型类:
public class TeamMatchDetail
{
[Key]
public int TeamMatchDetailId { get; set; }
public int TeamId { get; set; }
public virtual Team Team { get; set; }
}
public class Team
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TeamId { get; set; }
[Required, StringLength(30, MinimumLength = 3), Index(IsUnique = true)]
public string Name { get; set; }
}
上下文:
modelBuilder.Entity<TeamMatchDetail>()
.HasRequired(x => x.Team)
.WithRequiredDependent()
.WillCascadeOnDelete(false);
存储库:
context.TeamMatchDetails.Add(new TeamMatchDetail()
{
Team = null
});
context.SaveChanges();