我接手了一个首先使用EF6代码的项目。我有2个类,其中设置了一对多关系,在Fluent API中设置相同。
当我在同一步骤中创建父/子时一切都很好并保存,但是当我首先创建父,保存它然后我想添加一个孩子我得到一个异常,表明这两个实体在关系1到0..1并且不保存。
有没有办法先创建父项,然后再添加一个子项?
模型类:
public class Parent
{
public int ParentId {get; set;}
public virtual ICollection<Child> Children {get; set;}
}
public class Child
{
public int ChildId {get; set;}
public virtual Parent Parent {get; set;}
}
Fluent API:
modelBuilder.Entity<Child>()
.HasRequired<Parent>(s => s.Parent)
.WithMany(s => s.Children)
.HasForeignKey(s => s.ParentId);
在数据库中,我看到了外键ParentId
。如果我是对的,父母可以在没有孩子的情况下生活所有内容都以dbContext.SaveChanges()
例外:
Exception thrown: 'System.Exception' in Project.dll
Additional information: Multiplicity constraint violated. The role 'Child_Parent_Target' of the relationship 'Project.DAL.Child_Parent' has multiplicity 1 or 0..1.
答案 0 :(得分:0)
考虑给孩子一个ParentId属性
Select(driver.find_element_by_xpath("//select[@name='name']")).select_by_visible_text(" ")
如果您这样做,请按照 code-first conventions (click to view) 进行操作。如果遵循惯例,实体框架会理解父 - 子是一对多的关系:父母有零个或多个孩子,而孩子只有一个父母。
遵循惯例的好处是您不需要流畅的API语句。实体框架知道父级是必需的,父级有多个子级,父级的外键是ParentId
回到你的问题。将ParentId添加到您的孩子后,您可以添加没有孩子的父母,并在以后添加孩子。
添加ParentId后,您可以添加父级并稍后添加子级
public class Child
{
public int ChildId {get; set;}
public int ParentId {get; set;}
public virtual Parent Parent {get; set;}
}