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

时间:2019-03-11 20:08:24

标签: c# entity-framework entity-framework-6.2

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

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

这将从属性名称中删除所有“ _”,并将一列属性写入该属性。但这似乎破坏了EF。使用column属性,每次尝试进行选择实体之类的操作时,EF都会引发异常。

例外是:

  

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

如果我像在数据库中那样写原始名称,则EF将与该实体一起使用,但是如果我添加column属性,则不会。

是否可以重命名所有属性或使column属性起作用? 使用EF6.2

1 个答案:

答案 0 :(得分:0)

经过几天的研究,我没有找到其他方法,而是使用AutoMapper将Column转换为Entity.Property名称,因此我决定将我的ORM切换为更简单的ORM数据库优先方法。

结论:不可能