2009-07-14 58 views
1

场景: 尝试在我的LinqToSql DataContext对象的表上调用.AttachAll方法。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))' 无法根据用法推断。尝试 显式指定类型参数 。

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

+0

什么是cust.Invoices? IEnumerable ? – Zyphrax 2009-07-14 18:04:10

回答

1

如果cust.Invoices已经引用CustomerInvoices表的实例,只是做 db.Customers.Attach(cust); db.Update();应该是你需要做的一切。

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

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; 
} 
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);    
     } 
相关问题