实体框架,获取没有父母的孤儿子记录/记录

时间:2015-09-15 17:16:59

标签: c# entity-framework orphan

保存数据库上下文时出现以下异常:由于一个或多个外键属性不可为空,因此无法更改关系。

如上所述here,这可能是由于缺少级联删除。 但是,这不是我的代码,我不知道哪些表可以包含孤儿记录。错误消息没有这么说。

有没有办法检索那些孤儿记录。 (至少知道他们在哪个表中)

然后我将能够确定我需要调整哪部分代码。

2 个答案:

答案 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()));
}