I have now tried by using new datacontext object.
Works great on loads ofcourse.
I cant get update to work though. I use Attach method.
The way I use it below gives me DuplicateKeyException.
Note that my table has IDUserAccount(int) as Primary Key.
the useraccount variable is loaded in another function and is fetched
from a datacontext the same way as how the tmpaccount variable is set.
Any suggestions?

public override bool SaveDataToDB()
            {
                ClassFactory fact = ClassFactory.Instance;
                MyDB thedb = new MyDB
(fact.TheDataBaseConnection);
                try
                {
                    if (_loaded)
                    {
                        IQueryable<UserAccount> users = from h in
thedb.UserAccount
                                                        where
h.IDUserAccount == useraccount.IDUserAccount
                                                        select h;

                        long lcount = users.Count();
                        if (lcount == 0)
                        {
                            System.Windows.Forms.MessageBox.Show("No
data found!");
                            return false;
                        }
                        else if (lcount > 1)
                        {
                            System.Windows.Forms.MessageBox.Show("More
than one row found matching User ID:" +
useraccount.IDUserAccount.ToString());
                            return false;
                        }

                        UserAccount tmpaccount = users.First();

                        thedb.UserAccount.Attach(useraccount,
tmpaccount);
                    }
                    else
                    {
                        useraccount.AccountCreation = DateTime.Now;
                        useraccount.LastValidLogin = DateTime.Now;
                        Table<UserAccount> useraccounttable =
thedb.GetTable<UserAccount>();
                        useraccounttable.InsertOnSubmit(useraccount);
                    }

                    thedb.SubmitChanges();
                }
                catch (MySqlException ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    return false;
                }

                return true;
            }

On 4 Okt, 13:57, Peete <[email protected]> wrote:
> Is this an issue with DBLINQ or is it LINQ?
>
> So I cannot use my loaded table objects that I have gotten from the
> datacontext and keep them and make changes..and then submit them?
> An example would be to connect them to a datagridview which works
> really well, with change to data etc,,as long as datacontext is alive.
> How do you propose that implement a system where I need the data
> avaialable for a long time and will make changes which needs to be
> commited now and then?
> I thought I could use these table objects as my "structs" and then
> simply commit them. I guess I need to keep them but copy their data to
> a newly loaded table object when I need to store to db?
>
> /Peter, Sweden
>
> On 2 Okt, 16:14, Jonathan Pryor <[email protected]> wrote:
>
>
>
> > On Thu, 2009-10-01 at 23:10 -0700, Peete wrote:
> > > The issue I have is that once I have loaded data into my generated
> > > table objects and try to load them again, I get old data.
> > > I make changes to the database from another program after I have first
> > > loaded the dblinq objects.
> > > Note that I have one Datacontext object in my app which is alive the
> > > whole time.
>
> > Don't do that.  Seriously.  Just Don't Do That. [0]
>
> > > If I use locally created datacontext object then it loads
> > > the data correctly.
>
> > Yeah. :-)
>
> > > Is there some kind of caching of data?
>
> > Yes.  Caching is required in order to implement certain DataContext
> > behaviors [1].
>
> > > I have set QueryCacheEnabled to false but no difference.
>
> > That does something completely different.  It doesn't control caching of
> > entities, it controls caching of DbLinq-generated queries, so that a new
> > query doesn't need to be created anew.
>
> > It's also horribly buggy (which is why it defaults to 'false', or
> > should).
>
> >  - Jon
>
> > [0] Why not have a long-lived DataContext?  For a number of reasons:
>
> > 1. DataContext needs to cache all entity types returned from queries (so
> > that DataContext.SubmitChanges() can work [1]), so the longer the
> > DataContext lives, the larger the cache will become, and the more RAM
> > you'll use.  This is...undesirable.
>
> > 2. Large caches + lots of RAM use == slower performance (swapping = BAD)
>
> > 3. DataContext wraps an IDbConnection, and IDbConnections CAN fail (due
> > to network errors, etc.; check the dblinq archives).  Once the
> > IDbConnection is rendered invalid, the entire DataContext is also
> > invalid (because there's no way to "recreate" an IDbConnection instance
> > {unless the connection string provides the DbLinqConnectionType
> > parameter, but this doesn't help for the DataContext(IDbConnection)
> > constructor}).  This is also bad.
>
> > For best overall performance, and for best DB interaction behaviors, you
> > want the DataContext to live for as short a period as possible.
>
> > [1] Example of required caching
>
> >         var db = CreateDB();
> >         var e = db.Employees.First();
> >         e.FirstName = "Something Different";
> >         db.SubmitChanges();
>
> > In order for the db.SubmitChanges() call to work, the DataContext needs
> > to know that 'e' exists, and thus store a reference to 'e' (so that it
> > can perform change tracking).  This "stored reference" is a cache.  QED.- 
> > Dölj citerad text -
>
> - Visa citerad text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"DbLinq" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/dblinq?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to