【问题标题】:how to ge personID to delete address before delete person如何在删除人员之前获取人员ID以删除地址
【发布时间】:2014-02-12 20:54:21
【问题描述】:

我正在尝试删除在用户删除人员之前与人员关联的地址我遇到了问题,如您所见,我尝试在删除人员之前获取人员 ID 以将其从地址中删除 错误

无法创建“System.Object”类型的常量值。仅有的 在此上下文中支持原始类型或枚举类型。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.NotSupportedException:无法创建 'System.Object' 类型的常量值。只有原始类型或 在此上下文中支持枚举类型。

来源错误:

   [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Person person = db.Persons.Find(id);
        var  address = (from u in db.Addresses
                           where u.PersonID.Equals(id)
                           select u.PersonID).SingleOrDefault();
        db.Addresses.Remove(person);
        db.Persons.Remove(person);

        db.SaveChanges();
        return RedirectToAction("Index");
    }

【问题讨论】:

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


    【解决方案1】:
    Person person = db.Persons.Find(id);
    var  address = (from u in db.Addresses where u.PersonID == id).SingleOrDefault();
    
    if(address != null)
        db.Addresses.Remove(address);
    
    db.Persons.Remove(person);
    

    在您的示例中,您的 linq 查询正在提取您已经拥有的数据,那么您根本没有使用您的地址变量。

    您想从 db.Addresses 中删除一个地址,而不是一个人。这也假设每个人只有一个地址。

    【讨论】:

      【解决方案2】:

      我只是快速浏览了一下,但我认为您的问题在于代码的以下部分:

      var  address = (from u in db.Addresses
                             where u.PersonID.Equals(id)
                             select u.PersonID).SingleOrDefault();
      

      尝试替换

      where u.PersonID.Equals(id)
      

      where u.PersonID == id
      

      希望这对你有用!

      (出于兴趣,如果您查看 LeakyCode 的以下 Stackoverflow 响应,他已经阐明了 == 和 Equals 之间的区别:C# difference between == and Equals()

      【讨论】:

        【解决方案3】:

        您提到要删除属于某个人的所有地址,您需要获取它们的列表并删除它们...

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Person person = db.Persons.Find(id);
        
            var  addresses = from u in db.Addresses
                           where u.PersonID == id;
            addresses.ToList().ForEach(a => db.Addresses.Remove(a));
        
            db.Persons.Remove(person);
        
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        

        【讨论】:

          猜你喜欢
          • 2014-10-11
          • 1970-01-01
          • 2018-03-07
          • 1970-01-01
          • 1970-01-01
          • 2022-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多