C# 实体框架与RequiredPrinciple的一对一关系无依赖实体保存实体
我正在实体框架中使用代码优先的方法实现一对一关系。下面是我的模型C# 实体框架与RequiredPrinciple的一对一关系无依赖实体保存实体,c#,sql-server,entity-framework,c#-4.0,C#,Sql Server,Entity Framework,C# 4.0,我正在实体框架中使用代码优先的方法实现一对一关系。下面是我的模型 public class Course { public int CourseId { get; set; } public string CourseName { get; set; } public virtual Caption Caption { get; set; } } 这个呢 public class Caption { public int CaptionId { get;
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public virtual Caption Caption { get; set; }
}
这个呢
public class Caption
{
public int CaptionId { get; set; }
public string CaptionDesc { get; set; }
public virtual Course Course { get; set; }
}
在上下文中,我使用了以下代码
modelBuilder.Entity<Course>().HasRequired(c => c.Caption).WithRequiredPrincipal(c => c.Course);
modelBuilder.Entity().HasRequired(c=>c.Caption)。WithRequiredPrincipal(c=>c.Course);
在阅读本文时,他们说,假设您保存的课程实体没有标题,那么将抛出异常,实体框架不允许您存储实体。但当我这么做的时候,我没有任何例外。我可以存储这两个实体而不需要任何依赖项。请告诉我我做错了什么。我使用的是实体框架6
编辑:表如下所示 只有当表共享主键时,实体框架中的1:1关系才受支持。查看本文以了解帮助:entity framework中的1:1关系仅在表共享主键时才受支持。查看这篇文章以帮助理解:您没有将任何
主键
或外键
放在显示其约束的表上。SQL Server SSMS中的表看起来如何?他不需要这样做。Courseid和CaptionId遵循约定,所以EF很聪明,可以告诉你。这就是我的想法,但是如果他插入的行没有标题
,那么他不应该明确地强制执行与键
和外键
的关系吗?从技术上讲,你不能在SQL Server中执行1:1。看见链接中描述了通常的方法:将CourseId(并删除CaptionId)添加到标题表中,并使CourseId同时成为主键和外键。您没有在任一表上放置任何显示其约束的主键
或外键
。SQL Server SSMS中的表看起来如何?他不需要这样做。Courseid和CaptionId遵循约定,所以EF很聪明,可以告诉你。这就是我的想法,但是如果他插入的行没有标题
,那么他不应该明确地强制执行与键
和外键
的关系吗?从技术上讲,你不能在SQL Server中执行1:1。看见链接中描述了通常的方法:将CourseId(并删除CaptionId)添加到标题表中,并使CourseId同时成为主键和外键。