Исключение AttachAll: аргументы типа для метода не могут быть выведены из использования. Попробуйте явно указать аргументы типа - PullRequest
1 голос
/ 14 июля 2009

Сценарий : Попытка вызова метода .AttachAll для таблицы в моем объекте LinqToSql DataContext.

Вот соответствующий упрощенный фрагмент:

  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 ]

1 голос
/ 14 июля 2009

Tf cust.Invoices уже ссылается на экземпляры таблицы CustomerInvoices, просто db.Customers.Attach (касты); db.Update (); должно быть все, что вам нужно сделать.

Если CustomerInvoices отличается от Customer.Invoice, вам, вероятно, потребуется выполнить итерацию по коллекции и привести каждый из них.

0 голосов
/ 22 октября 2010
        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);               
        }
0 голосов
/ 22 октября 2010
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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...