Entity framework EF Code First Fluent API-所有列的小写首字母

Entity framework EF Code First Fluent API-所有列的小写首字母,entity-framework,ef-code-first,Entity Framework,Ef Code First,我希望建立一个EF代码优先的约定,其中属性的所有列名都有一个小写的首字母 但是,我还有其他fluent API代码,可以更改默认的列名。我似乎找不到一种方法来访问属性的当前列名,以便将第一个字母小写。在modelBuilder.Properties()中以PropertyInfo开头是不够的,因为列名可能已被设置为与成员名不同 我通常如何告诉EF Code首先将所有列名的第一个字母小写?好的,DBA正在发言。让我们毕恭毕敬地低头看看我们能做些什么。我担心在EF 5(及更低)中,您没有多少办法让它

我希望建立一个EF代码优先的约定,其中属性的所有列名都有一个小写的首字母

但是,我还有其他fluent API代码,可以更改默认的列名。我似乎找不到一种方法来访问属性的当前列名,以便将第一个字母小写。在modelBuilder.Properties()中以PropertyInfo开头是不够的,因为列名可能已被设置为与成员名不同


我通常如何告诉EF Code首先将所有列名的第一个字母小写?

好的,DBA正在发言。让我们毕恭毕敬地低头看看我们能做些什么。我担心在EF 5(及更低)中,您没有多少办法让它变得简单。在EF 6中,有这样一个特性,它实际上是小菜一碟。我只是尝试了一个小样本:

// Just some POCO
class Person
{
  public int PersonId { get; set; }
  public string PersonName { get; set; }
}

// A custom convention.
class FirstCharLowerCaseConvention : IStoreModelConvention<EdmProperty>
{
    public void Apply(EdmProperty property, DbModel model)
    {
        property.Name = property.Name.Substring(0, 1).ToLower()
                      + property.Name.Substring(1);
    }
}

class MyContext : DbContext
{
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Person>();

    // Add the convention to the modelbuilder.
    modelBuilder.Conventions.Add(new FirstCharLowerCaseConvention());

    base.OnModelCreating(modelBuilder);
  }
}
我的数据库有一个
People
表,其中包含
personId
personName

一些简单的CRUD操作可以完美地工作:

using (var db = new MyContext())
{
    var p = new Person { PersonName = "Another Geek" };
    db.Set<Person>().Add(p);
    db.SaveChanges();
}

using (var db = new MyContext())
{
    var x = db.Set<Person>().ToList();
}
使用(var db=new MyContext())
{
var p=新人{PersonName=“另一个极客”};
db.Set().Add(p);
db.SaveChanges();
}
使用(var db=new MyContext())
{
var x=db.Set().ToList();
}

因此,如果DBA想要他们的约定,您可以要求一个新玩具:)

您的电话,但只是好奇:为什么小写字符如此重要?你可以省下很多麻烦。@GertArnold是那些讨厌的DBA。:-)我选择了与他们的斗争,如果我能帮助的话,我选择不选择这一个。另外,如果你将Postgres作为你的DB运行,这很有价值,它强制执行所有小写的表和列名称这似乎是可行的,除了当我尝试创建一个实体并添加它时,我会得到一个InvalidOpEx“实体类型协议不是当前上下文模型的一部分”。还不确定问题出在哪里……啊,这是个坏消息。我已经研究过了,但到目前为止还没有任何线索。这就是这些alpha功能的问题,几乎没有任何文档。是的。我一直在做同样的事情。
using (var db = new MyContext())
{
    var p = new Person { PersonName = "Another Geek" };
    db.Set<Person>().Add(p);
    db.SaveChanges();
}

using (var db = new MyContext())
{
    var x = db.Set<Person>().ToList();
}