目标是将分离的根对象添加到数据库并跳过添加依赖子对象。我试图调用dbSetRoot.Add(root)方法将根对象附加到上下文。并将Child对象的状态设置为Unchanged以在SaveChange上跳过此对象。
类
public class Root
{
[System.ComponentModel.DataAnnotations.Key]
public int ID { get; set; }
public string Name { get; set; }
public IList<Child> Childs { get; set; }
}
public class Child
{
[System.ComponentModel.DataAnnotations.Key]
public int ID { get; set; }
public int RootID { get; set; }
public string Name { get; set; }
}
代码
// Prepare data to save
Root root = new Root()
{
Name = DateTime.Now.ToLongTimeString()
};
root.Childs = new List<Child>();
root.Childs.Add(new Child()
{
Name = DateTime.Now.ToLongTimeString()
});
// Save to DB
using (TasksDbContext dbContext = new TasksDbContext())
{
DbSet dbSetRoot = dbContext.Set<Root>();
dbSetRoot.Add(root);
dbContext.Entry(root.Childs[0]).State = System.Data.EntityState.Unchanged;
dbContext.SaveChanges(); // exception is here
}
此代码抛出异常&#34;发生了引用完整性约束违规:定义引用约束的属性值在关系中的主体和从属对象之间不一致。&#34;在SaveChanges()方法。
答案 0 :(得分:0)
您已使用新运算符创建Child
,其ID
将为'0'。
然后你已经将它添加到Root
,并告诉上下文它是不变的。
所以现在您正在尝试保存链接到ID为0的Root
的{{1}}对象,但数据库中不存在该子项,因此您将获得参照完整性约束违规。