保存数据库上下文时出现以下异常:由于一个或多个外键属性不可为空,因此无法更改关系。
如上所述here,这可能是由于缺少级联删除。 但是,这不是我的代码,我不知道哪些表可以包含孤儿记录。错误消息没有这么说。
有没有办法检索那些孤儿记录。 (至少知道他们在哪个表中)
然后我将能够确定我需要调整哪部分代码。
答案 0 :(得分:0)
在实体框架中,如果您有多对多的关系,并且您尝试从parent.Children.Remove(child)
这样的对象中删除,则这只会将子项从中间连接表中分离出来。所以你必须找到孩子并将其从DbContext ChildrenToParent实体中移除,如DbContext.ChildrenToParent.Remove(child)
。如果您提供一些代码示例和/或数据库图表,我想我可以更准确地解释它。
答案 1 :(得分:0)
您可以尝试以下解决方案吗?必须在DetectChanges和SaveChanges方法之间调用DeleteOrphans扩展方法。
public class MyLocator
{
private static StandardKernel kernel;
private static ISessionFactory sessionFactory;
static MyLocator()
{
this.kernel = new StandardKernel();
this.kernel.Load(new DependencyInjector());
}
public static StandardKernel MyKernel
{
get
{
return this.kernel;
}
}
public static ISession GetMySession()
{
....
return this.kernel.Get<ISession>();
}
.....
public static IRepository<T> GetRepository<T>() where T : MyEntity
{
return this.kernel.Get<IRepository<T>>(new ConstructorArgument("mysession", GetMySession()));
}