AttachAll异常:无法从用法推断出方法的类型参数。尝试显式指定类型参数

时间:2009-07-14 17:57:51

标签: linq-to-sql

方案: 试图在我的LinqToSql DataContext对象中的表上调用.AttachAll方法。

以下是相关的简化代码段:

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

编译器引发的异常

  

方法的类型参数   'System.Data.Linq.Table(的发票)。AttachAll(TSubEntity)(System.Collections.Generic.IEnumerable(TSubEntity))'   无法从使用中推断出来。尝试   指定类型参数   明确。

问题:正确投射集合的正确方法是什么?除了演员之外的任何其他解决方案?

3 个答案:

答案 0 :(得分:1)

Tf cust.Invoices已经引用了CustomerInvoices表的实例  db.Customers.Attach(卡斯特); db.Update();应该就是你需要做的一切。

如果CustomerInvoices是与Customer.Invoice不同的类型,您可能需要遍历该集合并投射每个集合。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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