代码之家  ›  专栏  ›  技术社区  ›  p.campbell

Attachal异常:无法根据用法推断方法的类型参数。尝试显式指定类型参数

  •  1
  • p.campbell  · 技术社区  · 15 年前

    脚本 : 尝试呼叫 .AttachAll 方法对LinqToSQL DataContext对象中的表执行。

    下面是相关的简化片段:

      public void Update(Customer cust){
        MyDataContext db = new MyDataContext();            
        db.CustomerInvoices.AttachAll(cust.Invoices);  //exception raised here!
        db.Customer.Attach(cust);
      }
    

    编译器引发的异常 :

    方法的类型参数 '系统数据.linq.table( 发票 ).attachal(tsubentity)(system.collections.generic.ienumerable(tsubentity))' 无法从用法推断。尝试 指定类型参数 明确地。

    问题 :正确投射集合的正确方法是什么?除了石膏还有其他的解决办法吗?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Dave    15 年前

    tf cust.invoices已经引用了customerinvoices表的实例,只是执行 db.customers.attach(cust);db.update();应该是您所需要做的全部工作。

    如果customerInvoices与customer.invoice是不同的类型,您可能需要遍历集合,并对每个集合进行强制转换。

        2
  •  0
  •   Shahzad Ali    14 年前
            else if (((CheckBox)item.Cells[2].FindControl("ckbSelect")).Checked == true && ((Label)item.Cells[2].FindControl("lblIsInuse")).Text == "1")
            {
                RolePage objTemp = new RolePage();
                objTemp = new Helper().GetRolePagebyID(roleId, Convert.ToInt32(item.Cells[0].Text));
                rp.RoleId = objTemp.RoleId;
                rp.PageId = objTemp.PageId;
                rp.RolePageId = objTemp.RolePageId;
                rp.CreatedOn = objTemp.CreatedOn;
                rp.Timestamp = objTemp.Timestamp; 
                //rp.RoleId = roleId;
                //rp.PageId = Convert.ToInt32(item.Cells[0].Text);
                //rp.RolePageId =Convert.ToInt32(((Label)item.Cells[2].FindControl("lblRolePageId")).Text.Trim());  
                rp.IsNew = false;
                rp.IsDeleted = false;                
                rp.UpdatedOn = DateTime.Now;  
                erp.Add(rp);               
            }
    
        3
  •  0
  •   brunnerh    13 年前
    public string Save(Role objRole)
    {
        string message = string.Empty;
        System.Data.Common.DbTransaction trans = null;    
        try
        {
            Objdb.Connection.Open();
            trans = Objdb.Connection.BeginTransaction();
            Objdb.Transaction = trans; 
            if (objRole.RoleId == 0)
            {
                Objdb.Roles.InsertOnSubmit(objRole);
            }
            else
            {                  
                Objdb.Roles.Attach(objRole, true);
                Objdb.RolePages.AttachAll(objRole.RolePages.Where(a => a.IsNew == false && a.IsDeleted == false), true);
                Objdb.RolePages.InsertAllOnSubmit(objRole.RolePages.Where(a => a.IsNew == true && a.IsDeleted == false));
                Objdb.RolePages.DeleteAllOnSubmit(objRole.RolePages.Where(a => a.IsNew == false && a.IsDeleted == true));
            }
            Objdb.SubmitChanges();
            trans.Commit();  
            message = "Record saved successfully.";
        }
        catch (Exception ex)
        {
            trans.Rollback();
            message = "Error : " + ex.Message;
        }
        return message; 
    }