3

プロパティのすべての列名の最初の文字が小文字になる EF Code First 規則を設定したいと考えています。

ただし、列名をデフォルトから変更する他の流暢な API コードがあります。最初の文字を小文字にするために、プロパティの現在の列名にアクセスする方法が見つからないようです。modelBuilder.Properties() のように、PropertyInfo から始めます。これは、列名がメンバー名とは異なるように既に設定されている可能性があるためです。

すべての列名の最初の文字を小文字にするように EF Code First に一般的に指示するにはどうすればよいですか?

4

1 に答える 1

5

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

走った後

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

私のデータベースには と の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();
}

したがって、DBA が規則を必要とする場合は、新しいおもちゃを要求できます :)

于 2013-03-01T21:09:16.097 に答える