C# 4.0 无法从数据库中删除实体(实体框架4.1)

C# 4.0 无法从数据库中删除实体(实体框架4.1),c#-4.0,entity-framework-4.1,ef-database-first,C# 4.0,Entity Framework 4.1,Ef Database First,我一直在拼命尝试从数据库中删除一个项目,但到目前为止无法使其正常工作。我看到的错误消息如下: "The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable." 我使用的是EF4.1,带有EDMX(数据库优先)和POCO对象。对于每种类型,我都有一个存储库和一个实现基本方法的通用存储库 具体问题是当我想删除

我一直在拼命尝试从数据库中删除一个项目,但到目前为止无法使其正常工作。我看到的错误消息如下:

"The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable."
我使用的是EF4.1,带有EDMX(数据库优先)和POCO对象。对于每种类型,我都有一个存储库和一个实现基本方法的通用存储库

具体问题是当我想删除一个项目时。删除子对象不是问题-一切都很完美-问题是当我开始删除实体本身时

考虑以下模型。我有一个实体“Foo”,它与“Bar”有一对多的关系。我在我的存储库中调用以下方法:

    public override void Delete(Models.Foo entity)
    {
        //Load the child items...
        base.Context.Entry(entity).Collection(x => x.Bars).Load();

        //Bar
        BarRepository barRep = new BarRepository();
        foreach (var item in entity.Bars)
        {
            var obj = barRep.GetById(item.ID);
            barRep.Delete(obj);
        }            

        barRep.Save();

        //First attempt
        //base.Delete(entity);
        //base.Save();

        //Have to resort to some SQL
        base.ExecuteSqlCommand(string.Format("delete from Foo where ID = {0}", entity.ID));
    }
一般存储“删除”方法是:

    public virtual void Delete(T entity)
    {
        _entities.Set<T>().Remove(entity);
    }
我想开始工作的是:

        //First attempt
        //base.Delete(entity);
        //base.Save();
但不幸的是,(目前)我删除该项的唯一方法是运行一些SQL,它只调用_entities.Database.ExecuteSqlCommand(SQL)

我读了很多东西,但似乎什么都不管用。我真的很感激你能帮助我理解正在发生的事情

谢谢


Jose

你不能配置级联删除吗?@GertArnold-你的确切意思是什么?我认为级联删除将用于关系而不是实际实体。谢谢。删除父项并级联删除子项。我已经实现了特定的删除方法,以便在需要这种级别的控制时可以执行一些审核任务。使用“级联”我会失去这个吗?谢谢。我不知道您的审核方法,但它们是在上下文本身中(例如SaveChanges覆盖),您应该可以。尝试你不能配置级联删除吗?@GertArnold-你的确切意思是什么?我认为级联删除将用于关系而不是实际实体。谢谢。删除父项并级联删除子项。我已经实现了特定的删除方法,以便在需要这种级别的控制时可以执行一些审核任务。使用“级联”我会失去这个吗?谢谢。我不知道您的审核方法,但它们是在上下文本身中(例如SaveChanges覆盖),您应该可以。尝试
        //First attempt
        //base.Delete(entity);
        //base.Save();