2016-09-13 21 views
1

EntityFrameworkに関する参照を持たないクラスライブラリから参照されるクラスにデータ注釈を追加できるかどうかは不思議です。例えばEntity Framework 6参照クラスにデータ注釈を追加

Project.Data.EntitiesライブラリProject.Data.Entitiesライブラリ

public class User { 
    public long Id { get; set; } 
    public string UserName { get; set; } 
} 

Project.Data.Repositories.EntityFramework参照。キーのプロパティ、列名、テーブル名などに関するデータ注釈を追加するにはどうすればよいですか?

答えて

2

この目的のために流暢なAPIがあります。あなたは

public class TestContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<User>() 
      .ToTable("user") 
      .HasKey(_ => _.Id); 

     modelBuilder.Entity<User>() 
      .Property(_ => _.Id).HasColumnName("id"); 

     modelBuilder.Entity<User>() 
      .Property(_ => _.UserName).HasColumnName("username"); // Add also HasMaxLength here 
    } 
} 

(データベースがすでに存在する場合、それはあなたのモデルにEFによって作成されていないあなたも移行を無効にする必要があります)

をOnModelCreatingオーバーライドする必要があり、あなたのマッピングについて

EDIT

編集

CIコードページを使用してSQL Serverをインストールした場合、列名のケーシングは重要ではありません。だから、HasMaxLength

+0

[表( "ユーザー")] パブリッククラスユーザー{ [キー] 【コラム( "ID")] 公共長い同上{取得を指定するだけで済みます。セット; } [列( "username")] パブリック文字列UserName {get;セット; } } エンティティを既存のデータベーススキーマにマッピングするだけでよいことを知っているので、どのようにして流暢なAPIを使用してこれを達成できますか? –

+0

しかし、これはすべてのエンティティにセットアップするために、これが過労だと感じています。私たちは外国のキーについてまだ話していません!データアノテーションは、はるかにクリーンで簡潔に思えました...それらを使用する方法は全くありませんか? –

+0

データアノテーションを使用することはできません(または、より良い方法で、流暢なAPIと同じように属性を追加することができますので、流暢なAPIが優れています)。流暢なAPIについては、データアノテーションではできないさまざまなことがあります(そのほとんどはリレーションシップ上にあります)ので、時にはそれらを使用する必要があります。 – bubi

関連する問題