【问题标题】:Delete from selected table in ASP.NET MVC从 ASP.NET MVC 中的选定表中删除
【发布时间】:2017-08-19 08:11:49
【问题描述】:

我正在尝试从 ASP.NET MVC 中的选定表中删除一条记录。

这就是我的行动:

public JsonResult DeleteFromTable()
{
    int IDtoDelete = Convert.ToInt32(Request.Form["itemId"]);
    string MyTableName = Convert.ToString(Request.Form["TblName"]);
    bool results = false;

    try
    {
        using (EBContext db = new EBContext())
        {
            Type tableType = typeof(CourseDesc);

            switch (MyTableName)
            {
                case "CourseTbl":
                    break;

                case "CourseDescTbl":
                    tableType = typeof(CourseDesc);
                    break;

                case "CourseSubDesc":
                    tableType = typeof(CourseSubDesc);
                    break;

                case "InternTbl":
                    tableType = typeof(InternShip);
                    break;

                case "ContactTbl":
                    Contact cn = db.Contacts.Where(x => x.ID == IDtoDelete);   //This line here is throwing error
                    bool bcn = UtilityMethods<Contact, int>.InsertEntity(db, cn);
                    break;
            }

            return new JsonResult { Data = "results", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        }
    }
    catch (Exception ex)
    {
        string innerMessage = (ex.InnerException != null) ? ex.InnerException.Message : "";
        return new JsonResult { Data = "Not Found", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }
}

我创建了一个类,我在其中传递这些参数并调用我的函数:

internal class UtilityMethods<TEntity, Tid> where TEntity : class
{
     public static bool DeleteEntity(EBContext dbContext, TEntity entity)
     {
         try
         {
             dbContext.Entry(entity).State = EntityState.Deleted;
             dbContext.Set<TEntity>().Remove(entity);

             dbContext.SaveChanges();

             return true;
         }
         catch (Exception ex)
         {
             string abc = ex.Message;
             return false;
         }
    }  
}

但我遇到了错误:

无法将类型“System.Linq.IQueryable”隐式转换为“EBazar.Models.Contact”。存在显式转换(您是否错过了演员表?)

【问题讨论】:

  • LINQ 方法Where 的返回类型是 IQueryable,您正试图将其分配给 Contact 类的单个对象。这就是您看到此错误的原因。你应该使用FirstOrDefault 而不是Where
  • 那么如何从 IDtoDelete 中选择记录。为了将它传递给我的函数?
  • Contact cn = db.Contacts.FirstOrDefault(x =&gt; x.ID == IDtoDelete);(返回单个对象)
  • 不相关,但将您的签名更改为public JsonResult DeleteFromTable(string TblName, int itemId) 并让DefaultModelbinder 发挥作用。
  • 联系人 cn = db.Contacts.FirstOrDefault(x => x.ID == IDtoDelete);这解决了我的问题。

标签: c# asp.net asp.net-mvc entity-framework linq


【解决方案1】:

您可能需要将Where 部分更改为FirstOrDefault 以便获取具有该条件的第一个对象(如果存在)。

  • FirstOrDefault 如果没有项目与谓词匹配,则返回类型的默认值。对于为空的引用类型。

所以你只需要先检查 null。

【讨论】:

    【解决方案2】:

    代替

    Contact cn = db.Contacts.Where(x => x.ID == IDtoDelete);
    

    Contact cn = db.Contacts.FirstOrDefault(x => x.ID == IDtoDelete);
    

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多