EntityFramework:如何修改edmx以更改实体名称和属性的格式

时间:2018-06-20 14:34:48

标签: entity-framework entity-framework-6 edmx ef-database-first

我正在使用Entity Framework从旧数据库生成数据访问代码。

数据库表的名称和属性均以大写字母命名,并以_分隔单词,即。 CLIENTCLIENT_NAMED_CLIENT_ID等。

我编写了一个类,将其转换为驼峰式的字符串:

public static class Extensions{
    public static string FirstCharToUpper(this string input)
    {
        return input.First().ToString().ToUpper() + input.Substring(1).ToLower();
    }

public static string CamelCase(this string input)
    {
        return input.Split('_').Where(a=>!string.IsNullOrEmpty(a)).Select(a=>a.FirstCharToUpper()).Aggregate((a,b)=>a+b);
    }
}

我正在从我的tt文件中调用它,并且我已经达到了我想要的数据类和DbContext命名的目的。

但是,现在尝试创建控制器时出现错误:“无法检索myNamespace.Client的元数据”。找不到“ myModel.ENTITYNAME”的CLR类型。 (大写)

要解决此问题,我使Data.tt用[Table("ENTITYNAME")]装饰数据类,并用[Column("COLUMNNAME")]装饰属性-但这没有任何区别。

我想念什么?

1 个答案:

答案 0 :(得分:0)

您是否在所有三个(或两个相应的)层中以相同的方式更新它:CSDL / MSL / SSDL?我怀疑其中两层之间不匹配。

在这种情况下可能有用-这是我几年前编写的用于创建/更新/操作EDMX文件的库:https://github.com/KristoferA/HuagatiEDMXTools/

如果您使用旧版本的Visual Studio(2013或更早版本),那么我也有一个免费的VS插件/插件,可添加重命名和db <-> model同步等。您可以从此处下载: https://huagati.com/edmxtools/

更新:基于以下评论,我认为您正在重命名生成的代码中的类和属性,而无需在CSDL中进行相应的更改。

代替更改生成的代码/ tt模板:更改CSDL中的名称以及对MSL中这些CSDL对象的引用。然后,默认模板将使用所需的类/属性/等名称生成代码。