Невозможно обновить запись в LINQ to SQL - PullRequest
1 голос
/ 03 августа 2011

Нужна помощь в обновлении записей с помощью LinQ.

Я попытался обновить запись, но она не отображается в базе данных.

Первичный ключ задается как в db, так и в файле LinQ dbml.

Ниже приведены коды:

RPHContrib _phContrib = new RPHContrib();
_phContrib.PHTableNo = phContrib.PHTableNo;
_phContrib.AmountFrom = phContrib.AmountFrom;
_phContrib.AmountTo = phContrib.AmountTo;
_phContrib.EmployeePH = phContrib.EmployeePH;
_phContrib.EmployerAmt = phContrib.EmployerAmt;
_phContrib.IsActive = phContrib.IsActive;
_phContrib.CreatedByNo = phContrib.CreatedByNo;
_phContrib.CreatedDate = phContrib.CreatedDate;
_phContrib.ModifiedByNo = SessionStateController.OnlineUserNo;
_phContrib.ModifiedDate = DateTime.Now;

LINQHelper.Instance.GenericDataContext<HRWizardDataContext>(GetDataContext(false));
LINQHelper.Instance.Update<RPHContrib>(_phContrib);

public bool Update<T>(T obj) where T : class, ICommon, new()
{
    using (var db = GetDBDataContext())
    {    
        db.Connection.Open();
        DbTransaction trans = db.Connection.BeginTransaction();
        db.Transaction = trans;

        // Populate object log                
        obj.IModifiedDate = DateTime.Now;

        try
        {
            Detach<T>(obj); // Detach LINQ entity from the original DataContext before attaching to the new one            
            db.GetTable<T>().Attach(obj, true);
            db.SubmitChanges();
            db.Transaction.Commit();
        }
        catch (Exception ex)
        {
            db.Transaction.Rollback();
            // TODO: Put error logging code here
            throw ex;
        }
        finally
        {
            if (db.Connection != null)
            {
                db.Connection.Close();
                db.Connection.Dispose();
            }
        }
    }
    return true;
}

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Когда вы добавляете новое зарегистрированное использование InsertOnSubmit(Entity), после этого любые автоматические номера (например, первичные) будут автоматически обновляться на вашем объекте после вызова SubmitChanges ().

Используйте Attach(Entity) при обновлении сущности. Внесите изменения в объект после того, как вы его прикрепили. Внесение изменений до того, как вы подключите его к контексту, не вызовет обновление SQL, поскольку контекст будет думать, что обновлять нечего.

0 голосов
/ 12 августа 2011

Вам нужно сделать insertonsubmit(obj); до submitchanges();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...