I committed your patch, however the CodeDomGenerator classes are used only by VisualMetal, not DbMetal (which uses the CodeTextGenerator). Well, that's what I hope, because the CodeDomGenerator is still a work in progress, and CodeTextGenerator is fully working (well, that's what I hope). Pascal.
jabber/gtalk: [email protected] msn: [email protected] On Fri, Feb 13, 2009 at 13:29, George Wieggers <[email protected]> wrote: > Hello again. > > I'm using SVN head, (rev 970). This time I included the patch as > attachment. > > Update didn't work for me, and I suspect, that occured because the > generated class didn't contain any PK attributes. > > I used the debugger and stepped into the code. > > - While selecting a row, it is "registered" as an entity. > - In function _GetOrRegisterEntity (in > DbLinq/Data/Linq/DataContext.cs), the system tries to fetch the primary > key. > In my case, var identityKey remained null > so: that row won't be tracked for changes (like the comment says...) > - As a result of that: In DbLinq/Data/Linq/DataContext.SubmitChanges() > was empty, so the function returned almost immediately without doing > anything. > > My patch will attach IsPrimaryKey=true for all PK's and IsPrimaryKey=false > for all other columns. > > This was good enough for me, but I can understand that my patch could use > some improvements... > > Regards, > > George (from Holland, not from Texas :-) ) > > 2009/2/13 Pascal Craponne <[email protected]> > > Hi George W (man, I speak to George W himself!), >> The IsPrimaryKey identifies PKs only. And the update usually works. By >> usually I mean "as far as I know". >> What version do you use? Latest release or SVN head? >> >> Also, if you want your patch to be reviewed, please submit it as an >> attachment. TortoiseSVN understand patches better than me and explains them >> to me in a more human-readable way :) >> >> Pascal. >> >> jabber/gtalk: [email protected] >> msn: [email protected] >> >> >> >> >> On Fri, Feb 13, 2009 at 12:14, george_w <[email protected]>wrote: >> >>> >>> Hello all. >>> >>> Today I dived in and tried to use DbLinq to manipulate a MySQL >>> database.. >>> >>> I ran into two problems: >>> 1: the generated code failed to compile. The attribute "AutoGenId" >>> wasn't recognised. I read that this attribute was deprecated, so I >>> removed the corresponding code in DbMetal >>> >>> 2. records weren't updated when I called db.SubmitChanges() >>> The C# class file, generated from my database schema, didn't include >>> any primary key column attributes. >>> >>> So, I debugged DbMetal (as I understand that VisualMetal isn't >>> maintained), and I patched it, so the "IsPrimaryKey" attribute is >>> included with every column. >>> >>> If my patch is correct, can it be committed into the repository? >>> >>> If it isn't correct, can anyone tell me how to get the primary key >>> attribute into the generated C# class properly? >>> >>> >>> Regards, >>> >>> George >>> >>> ======================= >>> >>> >>> Index: src/DbMetal/Generator/Implementation/CodeDomGenerator/ >>> AbstractCodeDomGenerator.cs >>> =================================================================== >>> --- src/DbMetal/Generator/Implementation/CodeDomGenerator/ >>> AbstractCodeDomGenerator.cs (revision 970) >>> +++ src/DbMetal/Generator/Implementation/CodeDomGenerator/ >>> AbstractCodeDomGenerator.cs (working copy) >>> @@ -214,8 +214,6 @@ >>> var columnMember = column.Member ?? column.Name; >>> >>> var field = new CodeMemberField(type, "_" + >>> columnMember); >>> - if (column.IsDbGenerated) >>> - field.CustomAttributes.Add(new >>> CodeAttributeDeclaration("AutoGenId")); >>> _class.Members.Add(field); >>> var fieldReference = new CodeFieldReferenceExpression >>> (new CodeThisReferenceExpression(), field.Name); >>> >>> @@ -237,7 +235,8 @@ >>> new CodeAttributeArgument("Storage", new >>> CodePrimitiveExpression(column.Storage)), >>> new CodeAttributeArgument("Name", new >>> CodePrimitiveExpression(column.Name)), >>> new CodeAttributeArgument("DbType", new >>> CodePrimitiveExpression(column.DbType)), >>> - new CodeAttributeArgument("CanBeNull", new >>> CodePrimitiveExpression(column.CanBeNull)) >>> + new CodeAttributeArgument("CanBeNull", new >>> CodePrimitiveExpression(column.CanBeNull)), >>> + new CodeAttributeArgument("IsPrimaryKey", new >>> CodePrimitiveExpression(column.IsPrimaryKey)) >>> ) >>> ); >>> property.CustomAttributes.Add(new >>> CodeAttributeDeclaration("DebuggerNonUserCode")); >>> >>> >>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
