2

我正在使用实体框架从旧数据库生成数据访问代码。

数据库表名和属性都以大写字母命名, _ 以分隔单词 ie。 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")]——但这并没有什么区别。

我错过了什么?

4

1 回答 1

0

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

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

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

更新:根据下面的评论,我认为您正在重命名生成代码中的类和属性,而没有在 CSDL 中进行相应的更改。

而不是更改生成的代码/tt 模板:更改 CSDL 中的名称以及对 MSL 中那些 CSDL 对象的引用。然后默认模板将生成具有您想要的类/属性/等名称的代码。

于 2018-06-25T11:18:28.500 回答