views:

84

answers:

1

When dbml file is generated automatically by Visual Studio I get the exact field names as they appeared in the tables.

However, since VS does not provide refresh function for dbml, I run sqlmetal manually to re-create dbml file. It works fine with one exception -- sqlmetal "corrects" the names

ses_Id -> Ses_Id
aga_Id -> Aga_Id

and so on -- it probably changes camelCase to CamelCase.

Sqlmetal help does not list any switch to keep field names as-is (there is only pluralize switch). So, does anyone know the hidden switch to keep the case of field name?

Thank you in advance.

SOLVED

There is no such switch, and MS was notified about the problem -- the wish report to add such feature (because it casuses problem with updating project) was closed as wontfix :-(

+2  A: 

I doubt there is a hidden switch. I had the same problem, so I wrote a simple Perl script to sort it out:

# Usage: fdbml.pl in.dbml out.dbml
my $in_file = $ARGV[0];
my $out_file = $ARGV[1];

# Scrape in file for identifiers
my @identifiers;
open IN, "<$in_file";
while (<IN>) {
    if ($_ =~ /<Table Name="(?:\w+\.)?(\w+)" Member="(\w+)"/) { push @identifiers, "$1 $2"; }
    if ($_ =~ /<Function Name="(?:\w+\.)?(\w+)" Method="(\w+)"/) { push @identifiers, "$1 $2"; }
}
close IN;

# Translate in file to out file
open IN, "<$in_file";
open OUT, ">$out_file";
while (<IN>) {
    my $line = $_;

    # Replace identifiers
    foreach my $identifier (@identifiers) { 
        my ($new, $old) = split(' ', $identifier);
        $line =~ s/"$old((?:Result)?)"/"$new$1"/g;
    }   
    $line =~ s/<Parameter Name="(\w+)" Parameter="\w+"/<Parameter Name="$1" Parameter="$1"/;

    print OUT $line;
}
close OUT;
close IN;

Just save all that to fdbml.pl, make sure you have ActiveState Perl installed, then run this on your DBML file:

fdbml.pl old.dbml new.dbml

Ben

BG100
It appears a lot of people write dbmlhacker wrappers :-) I wrote mine too -- it deals with this problem and others too (like adding notifications on value set, not only changed).
macias
Yep! This chunk of Perl script is only a cut down version to answer your question. My complete script also fixes the problem that when a stored proc returns a set of records via a SELECT, the primary key and other NOT NULL columns appear as Nullable<> types in the DataContext.
BG100