I figured it out.

I was using the wrong parameters for DbMetal: /language:C#2

I figured that C# was meant for generating code for .NET1 and C#2 was meant
for .NET 2.0

You may revert my patch if you wish. The generated code using parameter
/language:C#  is ok now.

Thanks for your help.

- George

2009/2/13 Pascal Craponne <[email protected]>

> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to