我正在使用Entity Framework从旧数据库生成数据访问代码。
数据库表的名称和属性均以大写字母命名,并以_
分隔单词,即。 CLIENT
,CLIENT_NAME
,D_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")]
装饰属性-但这没有任何区别。
我想念什么?
答案 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对象的引用。然后,默认模板将使用所需的类/属性/等名称生成代码。