【问题标题】:Removing Rows in Entity Framework删除实体框架中的行
【发布时间】:2015-12-01 22:32:24
【问题描述】:

我想要创建的是当用户选择一个项目时,该项目将从项目列表中消失。有些项目可以提交一次,一旦提交,用户就不能再次提交相同的项目。提交的项目将被记录到数据库中。

我遇到的问题是弄清楚我的逻辑出了什么问题,因为它正在破坏,我可以做些什么来改进它?

using (var db = new myDatabase())
        {
            var itemLists = db.GetAllItem().ToList();
            var userSubmittedItems = db.GetAllUserItem("LoginID").ToList();

            if (userSubmittedItems.Count > 0)
            {
                foreach (var submittedItems in userSubmittedItems)
                {
                    foreach (var item in itemLists)
                    {
                        int itemID = item.ItemID;
                        int userItemID = userSubmittedItems.UserItemID;

                        if (itemID == userItemID && item.OneTime == true)
                        {
                            itemLists.Remove(item);
                        }
                    }
                }
            }

【问题讨论】:

  • 您只是从itemLists 中的集合中删除,如果您还想从数据库中删除它们,您需要执行db.ItemEntity.Remove(item) 并以db.SaveChanges() 结尾以提交更改到数据库。
  • 它坏了 不多说。

标签: c# entity-framework


【解决方案1】:

您只是删除集合itemLists 中的项目,您没有在它自己的数据库中执行任何操作......因为您应该这样做,并想象您的项目实体被称为ItemEntity 这样做:

    using (var db = new myDatabase())
    {
        var itemLists = db.GetAllItem().ToList();
        var userSubmittedItems = db.GetAllUserItem("LoginID").ToList();

        if (userSubmittedItems.Count > 0)
        {
            foreach (var submittedItems in userSubmittedItems)
            {
                foreach (var item in itemLists)
                {
                    int itemID = item.ItemID;
                    int userItemID = userSubmittedItems.UserItemID;

                    if (itemID == userItemID && item.OneTime == true)
                    {
                        itemLists.Remove(item);
                        db.ItemEntity.Remove(item); // mark for delete
                    }
                }
            }
            db.SaveChanges(); // all marked items, if any, will now 
                              //  be committed in a db call
        }

有关使用 EF 删除记录的更多信息:Delete a single record from Entity Framework?

【讨论】:

  • 所有项目列表将是静态的,我希望将现有列表修改为尚未提交的列表,然后根据用户登录显示该信息。我尝试使用两个变量,但由于某种原因最终改变了这两个变量。一个是原始的,另一个是修改后显示的。
  • 我明白了:收藏已修改;枚举操作可能无法执行。即使我使用两个不同的变量。不知道我是不是想多了,或者我错过了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
相关资源
最近更新 更多