C# 实体框架数据库优先和列属性不起作用

C# 实体框架数据库优先和列属性不起作用,c#,entity-framework,entity-framework-6.2,C#,Entity Framework,Entity Framework 6.2,我有一个数据库,其约束条件是所有主键都以_Id结尾。对于我的EF类,我想省略下划线,因此我将用于生成属性的T4模板更改为此CodeStringGenerator。属性: 这将从属性名称中删除所有uu,并将列属性写入属性。但这似乎打破了EF。对于column属性,每当我尝试进行类似于选择实体的操作时,EF都会抛出一个异常 例外情况是: 实体类型实体不是当前上下文模型的一部分 如果我像在数据库中那样写入原始名称,它将与实体一起工作,但如果我添加column属性,则不会 有没有办法重命名所有属性或使c

我有一个数据库,其约束条件是所有主键都以_Id结尾。对于我的EF类,我想省略下划线,因此我将用于生成属性的T4模板更改为此CodeStringGenerator。属性:

这将从属性名称中删除所有uu,并将列属性写入属性。但这似乎打破了EF。对于column属性,每当我尝试进行类似于选择实体的操作时,EF都会抛出一个异常

例外情况是:

实体类型实体不是当前上下文模型的一部分

如果我像在数据库中那样写入原始名称,它将与实体一起工作,但如果我添加column属性,则不会

有没有办法重命名所有属性或使column属性正常工作? 使用EF6.2

经过几天的研究,我没有找到一种方法,除了使用AutoMapper进行列到实体的单向转换。属性名称,所以我决定将我的ORM切换到一个更简单的ORM,它主要使用数据库优先的方法


结论:不可能

您是指生成EDMX和实体类的t4模板吗?如果不是,我假设您首先使用代码,因此您可以使用代码优先自定义约定来实现所需。@GertArnold是的,我指的是用于在“数据库优先”策略中生成实体的t4模板。。。如本主题标题中所述。那么您就没有选择了。首先使用数据库时,将忽略数据注释。以EDMX中的映射信息为准。据我所知,无法干预VisualStudio中实体框架工具如何编写EDMX。
public string Property(EdmProperty edmProperty)
{
    var dbName = _code.Escape(edmProperty);
    var propResult = "";

    if(dbName.Contains("_"))
    {
        propResult = "[Column(\"" + dbName + "\")]\r\n\t";
        dbName = dbName.Replace("_", "");
    }

    return propResult + string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1} {2} {{ {3}get; {4}set; }}",
        Accessibility.ForProperty(edmProperty),
        _typeMapper.GetTypeName(edmProperty.TypeUsage),
        dbName,
        _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
        _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}