属性的EF区分大小写

时间:2015-11-04 19:17:50

标签: c# entity-framework

我目前遇到了这个错误

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

我通过在下面的代码中更改了model1.tt中的第284行(如果你没有给edmx命名,它会给你model1)来生成这个bug。我这样做是因为我们的约定是拥有camalCase数据库列名和PascalCase对象属性名。下面的代码将camalCase列名称转换为PascalCase对象属性名称,如下所述。

string.Format("{0}{1}",_code.Escape(edmProperty).Substring(0,1).ToUpper(),_code.Escape(edmProperty).Substring(1)),

由T4模板生成的实体

public partial class Person
{
    public int PersonId { get; set; }
    public int Age { get; set; }
}

表定义

CREATE TABLE Person ( personId int, age int)) 

当我尝试进行集成测试时出现问题

_context.Person.toList();

当运行与数据库交互的任何代码时,会发生先前描述的错误。如何修复我的解决方案,以便我可以使用PascalCase属性名称和camelCase数据库列名称并按预期工作?

**编辑**

我使用的是EF 5,无法访问EF 6

这也是使用Database-First

**编辑2 **

   public string Property(EdmProperty edmProperty)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            "[Column(\"{5}\")]\n{0} {1} {2} {{ {3}get; {4}set; }}",
            Accessibility.ForProperty(edmProperty),
            _typeMapper.GetTypeName(edmProperty.TypeUsage),
            _code.Escape(edmProperty),
           //_code.Escape(string.Format("{0}{1}",_code.Escape(edmProperty).Substring(0,1).ToUpper(),_code.Escape(edmProperty).Substring(1))),
            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)),
            _code.Escape(edmProperty));
    }

这是我修改过的t4模板。注释掉的代码不起作用,它上面的行就可以了。 (使用我的集成测试)

0 个答案:

没有答案