Click here to Skip to main content
15,888,121 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
Hi All,

I have an initial selection which I place into list. I use the list to loop through each record and where it meets certain criteria I run trough a series of inserts, deletes and updates. Finally call the SaveChanges() method to commit changes.

The code runs through without raising an exception but no changes reflect in the database. I have been searching the web with no luck.

I'm using VS2008 with SQL2008 backend & code snippet below.

Please help?

Thanks in advance,
GP

MSIL
using (SMSEntities db = new SMSEntities())
        {
            try
            {
                //Get SMS's to send from Inbox
                List<Inbox> tmpInbox = (from c in db.Inboxes where c.Status != "NEW" && c.Status != "SUCCESS" select c).ToList();// new { Inbox.InboxID, Inbox.StatusTrackingID, Inbox.Status, Inbox.NoOfAttempts, Inbox.CellNo, Inbox.SourceCellNo, Inbox.Header, Inbox.Message, Inbox.MessageDate, Inbox.AccountID, Inbox.LastAttemptDate }).ToList();
                foreach (Inbox tmpInboxIndex in tmpInbox)
                {
                    bool success = false;
                    //Check status here
                    string SentStatus = CheckSMSSentToProvider(tmpInboxIndex.StatusTrackingID);
                    // Define a transaction scope for the operations.
                    using (TransactionScope transaction = new TransactionScope())
                        {
                        try
                        {
                            if ((SentStatus == "DELIVERED") || (SentStatus == "NOTFOUND") || (SentStatus == "DELETED") || (SentStatus == "REJECTED") || (SentStatus == "UNDELIVERED"))
                            {
                                //Insert the Log row
                                Log newLog = new Log();
                                newLog.InboxID = tmpInboxIndex.InboxID;
                                newLog.CellNo = tmpInboxIndex.CellNo;
                                newLog.SourceCellNo = tmpInboxIndex.SourceCellNo;
                                newLog.Message = tmpInboxIndex.Message;
                                newLog.Header = tmpInboxIndex.Header;
                                newLog.MessageDate = tmpInboxIndex.MessageDate;
                                newLog.AccountID = tmpInboxIndex.AccountID;
                                newLog.ProcessedDate = DateTime.Now;
                                newLog.Status = tmpInboxIndex.Status;
                                newLog.StatusTrackingID = tmpInboxIndex.StatusTrackingID;
                                newLog.NoOfAttempts = tmpInboxIndex.NoOfAttempts;
                                newLog.LastAttemptDate = tmpInboxIndex.LastAttemptDate;
                                db.Logs.AddObject(newLog);
                                //Delete the Inbox row
                                if (tmpInbox != null)
                                {
                                    var deleteInbox = (from c in db.Inboxes where c.InboxID == tmpInboxIndex.InboxID select c).FirstOrDefault();
                                    if (deleteInbox != null)
                                    {
                                        db.DeleteObject(deleteInbox);
                                        //db.SaveChanges(SaveOptions.DetectChangesBeforeSave);
                                    }
                                }
                            }
                            else
                            {
                                //Update inbox status
                                var tmpUpdateInbox = (from c in db.Inboxes where c.InboxID == tmpInboxIndex.InboxID select c).FirstOrDefault();
                                tmpUpdateInbox.Status = SentStatus;
                                tmpUpdateInbox.NoOfAttempts = tmpInboxIndex.NoOfAttempts + 1;
                                tmpUpdateInbox.LastAttemptDate = DateTime.Now;
                                //db.SaveChanges(SaveOptions.DetectChangesBeforeSave);
                            }
                            // Mark the transaction as complete.
                            transaction.Complete();
                            success = true;
                            //break;
                        }
                        catch (Exception ex)
                        {
                            // Handle errors and deadlocks here and retry if needed.
                            // Allow an UpdateException to pass through and
                            // retry, otherwise stop the execution.
                            if (ex.GetType() != typeof(UpdateException))
                            {
                                Console.WriteLine("An error occured. "
                                    + "The operation cannot be retried."
                                    + ex.Message);
                                break;
                            }
                            // If we get to this point, the operation will be retried.
                        }
                    }
                    if (success)
                    {
                        // Reset the context since the operation succeeded.
                        //db.AcceptAllChanges();
                        db.SaveChanges();
                    }
                }
                // Dispose the object context.
                db.Dispose();
            }
            catch (Exception exp)
            {
                throw new Exception("ERROR - " + exp.Message.ToString(), exp);
            }
        }
        return true;
Posted

By any chance is your database a local database? By this, I mean local to the project? If so, check to see if the database has been updated in your debug directory. A common problem is for there being a master database in the development environment which overwrites the one in the debug directory every time the application runs because it is set to overwrite always.
 
Share this answer
 
@Pete,

Maybe it'll help if I explain a bit more.

I have 2 projects within the solution
- Web App
- Windows Service App

The main DB resides on the Web App and I created a new Entity (on the Service app) pointing directly to the Web App. After creating the new Entity it looked like it made a copy of the DB from the web app to the Windows service app...... which was not my intention..... I only wanted to "reference" the DB in the web app.

Did I reference it in the correct manner? Is it the right way to do it

Based on your response I think that the answer might lie here somewhere.

Cheers,
GP
 
Share this answer
 
Comments
mistergamer 30-Jan-13 9:29am    
i have the same problem of you but in a WPF application.
if anyone know a solution, please help.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900