0

我有一个数据库,其约束条件是所有主键都以_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 将与实体一起使用,但如果我添加列属性则不会。

有没有办法重命名所有属性或使列属性起作用?使用 EF6.2

4

1 回答 1

1

经过几天的研究,我没有找到其他方法,然后使用 AutoMapper 将列单向转换为 Entity.Property 名称,所以我决定将我的 ORM 切换到一个更简单的 ORM,它主要使用 Database First 方法。

结论:不可能

于 2019-03-15T18:02:10.433 回答