2

我一直在拼命地尝试从数据库中删除一个项目,但到目前为止还无法让它工作。我看到的错误信息是这样的:

"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));
    }

GenericRepository“删除”方法是:

    public virtual void Delete(T entity)
    {
        _entities.Set<T>().Remove(entity);
    }

GenericRepository“保存”方法很简单:

    public virtual void Save()
    {
        _entities.SaveChanges();
    }

我想上班是这样的:

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

但不幸的是(目前)我删除该项目的唯一方法是运行一些只调用_entities.Database.ExecuteSqlCommand(SQL) 的SQL。

我已经阅读了很多东西,但似乎没有任何效果。在尝试了解正在发生的事情时,我真的很感激一些帮助。

谢谢,

何塞

4

0 回答 0