2009-07-14 14 views
1

シナリオ: LinqToSql DataContextオブジェクトのテーブルで.AttachAllメソッドを呼び出そうとしています。 (請求書「)System.Data.Linq.Table方法 ためAttachAll例外:methodの型引数は、その使用法から推論できません。明示的に型引数を指定してみてください

型引数:コンパイラが提起した

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

例外:ここ

は、関連する単純化スニペットです.AttachAll(TSubEntity)(System.Collections.Generic.IEnumerable(TSubEntity)) ' はその使用から推論できません。タイプ引数 を明示的に指定して、 を試してください。

質問:コレクションを適切にキャストする適切な方法は何ですか?キャスト以外のソリューション?

+0

cust.Invoicesは何ですか? IEnumerable ? – Zyphrax

+0

Zyphに感謝します。請求書は、.dbmlで定義されたタイプの請求書です。 –

答えて

1

Tf 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);    
     } 
関連する問題