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

时间:2016-01-04 20:18:14

标签: c# entity-framework code-generation t4

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

我已经看过一些T4的东西,反向poco发电机等等。但是,手动重命名属性似乎很费劲。是您选择" ADO.NET实体数据模型"时运行的(实体数据模型向导)代码的源代码。在VS添加新项目窗口可用的任何地方,所以我可以从已经工作的东西开始?

或者有人知道将要采取的史诗般的发现/替换

public string n_addr1 { get; set; }

并给予

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

不知道调用了什么n_addr1,这意味着它必须匹配公共字符串和/或{get;设置;}

1 个答案:

答案 0 :(得分:1)

我做了类似的事情,我将发布我用来找到"名称"的代码。班上的。我编辑,以便它与您传递的fileName一起使用。测试我的一个类,这是有效的。

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);
    }
}