Linq 如何强制sqlmetal保留字段名大小写?

Linq 如何强制sqlmetal保留字段名大小写?,linq,visual-studio,linq-to-sql,sqlmetal,Linq,Visual Studio,Linq To Sql,Sqlmetal,当VisualStudio自动生成dbml文件时,我会得到表中显示的确切字段名 然而,由于VS并没有为dbml提供刷新功能,所以我手动运行sqlmetal来重新创建dbml文件。它工作正常,但有一个例外——sqlmetal“更正”了名称 ses_Id -> Ses_Id aga_Id -> Aga_Id 等等--它可能会改变一个又一个camelCase Sqlmetal帮助没有列出任何保持字段名称不变的开关(只有复数化开关)。那么,是否有人知道隐藏开关以保持字段名的大小写 先谢谢你

当VisualStudio自动生成dbml文件时,我会得到表中显示的确切字段名

然而,由于VS并没有为dbml提供刷新功能,所以我手动运行sqlmetal来重新创建dbml文件。它工作正常,但有一个例外——sqlmetal“更正”了名称

ses_Id -> Ses_Id
aga_Id -> Aga_Id
等等--它可能会改变一个又一个camelCase

Sqlmetal帮助没有列出任何保持字段名称不变的开关(只有复数化开关)。那么,是否有人知道隐藏开关以保持字段名的大小写

先谢谢你

解决了的
没有这样的切换,MS收到了问题通知——希望添加这样功能的报告(因为它会导致项目更新出现问题)被关闭为wontfix:-(

我怀疑是否存在隐藏的切换。我也遇到了同样的问题,所以我编写了一个简单的Perl脚本来解决这个问题:

# 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;

Ben

似乎很多人都在写dbmlhacker包装器:-)我也写了我的——它处理这个问题和其他问题(比如在值集上添加通知,而不仅仅是更改)。是的!这段Perl脚本只是回答您问题的简化版本。我的完整脚本还修复了一个问题,即当存储过程通过SELECT返回一组记录时,主键和其他NOTNULL列在DataContext中显示为可空类型。
fdbml.pl old.dbml new.dbml