EF 代码首先重命名生成的 POCO 中的属性 类

EF Code First renaming of properties in generated POCO classes

我正在使用实体数据模型向导(数据库中的代码优先)生成 dbcontext 和 POCO 类。不幸的是,我 运行 在一个非常旧的数据库上,所有数据库列的名称都是小写的,经常带有下划线,在 C# 中看起来像垃圾。如果代码生成器将属性 [Column("column_name")] 放在数据库中未大写的所有内容之上,或者如果有一种简单的方法可以告诉visual studio 查看文件并为所有还没有它的小写属性添加该属性(甚至只是所有属性句点)。

我看过一些 T4 的东西,反向 poco 生成器等。但是启动它似乎和手动重命名属性一样耗时 运行。当您在 VS 添加新项 window 中 select "ADO.NET Entity Data Model" 时运行的(实体数据模型向导)代码的源是否在任何地方可用,以便我可以从已经工作的东西开始?

或者有人知道需要

的史诗 find/replace
public string n_addr1 { get; set; }

并给予

[Column("n_addr1")]
public string N_addr1 { get; set; }

不知道 n_addr1 叫什么,这意味着它必须匹配 public 字符串 and/or {get;设置;}

我做了类似的事情,我打算 post 我用来找到 class 的 "name" 的代码。我进行了编辑,以便它可以与您传递的文件名一起使用。在我的 classes 之一上进行了测试,这是有效的。

var fileName = @"YOUR FILE NAME";
StringBuilder builder = new StringBuilder();
using (StreamReader sr = new StreamReader(fileName))
{
    while (!sr.EndOfStream)
    {
        var line = sr.ReadLine();
        var match = Regex.Match(line, @"{\s?get;\s?set;\s?}");
        if (match.Success)
        {
            var split = Regex.Split(line, @"{\s?get;\s?set;\s?}");
            var declaration = split[0].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            var last = declaration.Count();
            var name = declaration[last - 1];
            builder.AppendLine(string.Format("[Column(\"{0}\")]", name));
        }
        builder.AppendLine(line);
    }
}