2016-05-04 15 views
-1

既存のデータベースでエンティティフレームワークを使用することについての情報を探していますが、別のライブラリにpocoクラスを保持しています。Entity Framework - 既存のデータベース、別個のライブラリ内のクラス

これまで数回行ってきましたが、EFとドメインクラスを別のライブラリで使用して、データアクセスライブラリのモデルクラスを作成しました。必然的にこれは、私のドメインクラスと私のモデルクラスとの間で変換するコードを書くことを意味しました。クラスは通常ほぼ同一であるため、これは無意味で非効率的です。

私のクラスが別のライブラリのEFによって実現されているウォークスルーに誰かが指摘できますか?私はいくつかのマイナーな名前の修正(例えばFilter_Rule - > FilterRule)を行うことができる必要があります。また、必要に応じてデータアクセスライブラリを交換できるように、データアクセスライブラリにEF固有のものを保持することもできます。

おかげで、

ジェイソン

答えて

1

これは非常に簡単でなければなりません。通常はDbContextコードファーストスタイルを作成し、必要に応じてDbSetsと構成を追加してEFにデータベースについて伝えます。それはあなたの既存のデータベースを台無しにしようとしないので、nullにあなたの初期化子を設定し、出来上がり...

public class YourContext : DbContext 
{ 
    public DbSet<YourPoco> YourPocos { get; set; } 

    static YourContext() 
    { 
     Database.SetInitializer<YourContext>(null); 
    } 

    public YourContext() : base("database_name") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 

     builder.Entity<YourPoco>().Property(x => x.FilterRule).HasColumnName("Filter_Rule"); 
     //OR 
     builder.Configurations.Add(new YourPocoConfig()); 
     //OR 
     builder.Configurations.AddFromAssembly(typeof (YourContext).Assembly); 
    } 
} 

public class YourPocoConfig : EntityTypeConfiguration<YourPoco> 
{ 
    public YourPocoConfig() 
    { 
     HasKey(x => x.Id); 
     Property(x => x.FilterRule).HasColumnName("Filter_Rule"); 
    } 
} 

あなたのデータベース構造を一致させるためにすべてを得ることを心配している場合は、あなたがEntity Frameworkのツールを使用することができますVisual Studioを使用してモデルをリバースエンジニアリングし、生成されたPOCOを他のライブラリにコピーし、データアノテーションをEntityTypeConfigurationクラスに変換してPOCOをきれいに保ちます。

MSDN document on reverse engineering code-first

関連する問題