【问题标题】:EF Code First Fluent API - lowercase first letters of all columnsEF Code First Fluent API - 所有列的首字母小写
【发布时间】:2013-03-01 14:34:53
【问题描述】:

我希望设置一个 EF Code First 约定,其中属性的所有列名都有一个小写的第一个字母。

但是,我有其他流畅的 API 代码可以更改默认的列名。我似乎无法找到一种方法来访问属性的 current 列名称以小写第一个字母。从 PropertyInfo 开始,如在 modelBuilder.Properties() 中是不够的,因为列名可能已经设置为与成员名不同。

我一般如何告诉 EF Code First 将所有列名的第一个字母小写?

【问题讨论】:

  • 您的电话,但只是好奇:为什么小写字符如此重要?你可以为自己省去很多麻烦。
  • @GertArnold 是那些讨厌的 DBA。 :-) 我选择与他们战斗,如果我能帮上忙,我选择不选择这一场。
  • 另外,如果您将 Postgres 作为数据库运行,这将很有价值,这会强制使用全小写的表名和列名

标签: entity-framework ef-code-first


【解决方案1】:

好的,DBA 正在发言。让我们恭敬地低下头,看看我们能做些什么。恐怕在 EF 5(及更低版本)中,您无能为力。在 EF 6 中,Custom Code First Conventions 的这个特性实际上使它变得轻而易举。我只是尝试了一个小样本:

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

运行后

using (var db = new MyContext())
{
  db.Database.Create();
}

我的数据库有一个People 表,其中包含personIdpersonName

而且一些简单的 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();
}

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

【讨论】:

  • 这似乎有效,除了当我尝试创建实体并添加它时,我得到一个 InvalidOpEx “实体类型协议不是当前上下文模型的一部分”。还不确定是什么问题...
  • 啊,那是个坏消息。我已经调查过了,但到目前为止还没有任何线索。这就是这些 alpha 功能的问题,几乎没有任何文档。
  • 是的。我一直在做同样的事情。
猜你喜欢
  • 2014-09-26
  • 2013-10-21
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
相关资源
最近更新 更多