14

エンティティフレームワーク6を既存のデータベースでコードファーストで使用していますが、エンティティをデータベーステーブルにマッピングする際に問題があります。コードファースト:既存のデータベーステーブルへのエンティティのマッピング

通常、私はデータベースファーストアプローチを使用し、エンティティとコンテキストコードを生成しますが、デザイナを使用することは大きな苦痛になりました。

EFでスキーマを変更しないようにDatabase.SetInitializer(null)を設定しました。

データベース・スキーマ:コード-最初

enter image description here

public class Project 
{ 
    public int ProjectId { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 
} 

public class ReleaseControlContext : DbContext 
{ 
    public ReleaseControlContext() 
     : base(ConfigurationManager.ConnectionStrings["ReleaseControl"].ConnectionString) 
    { 
     Database.SetInitializer<ReleaseControlContext>(null); 
    } 

    public DbSet<Project> Projects { get; set; } 
} 

電話番号:

using(var context = new ReleaseControlContext()) 
{ 
    var projects = context.Projects.ToList(); 
} 

次の例外がスローされます。

SqlExceptionが:無効なオブジェクト名 'dbo.Projects'。

私のデータベーステーブルがプロジェクトないプロジェクトあるためです。私の文脈のDbSet<Project>の名前を "Project"に変更したくないのは、それが意味的に間違っているからです。

質問:

私はプロジェクトデータベーステーブルとDbSet<Project> Projectsコレクションの間でマッピングするために流暢なAPI /データ注釈を使用する必要がありますか?

+0

次の方法で呼び出されなければなりません;テーブルはProjectsと呼ばれなければなりませんが、間違っていますが、データ注釈を使用して名前[Table( "Projects")]を使用することができます。 –

+0

DBContextを作成する前にイニシャライザを呼び出そうとしました。それをどこかに置いてください。 –

答えて

18

あなたは、プロジェクトエンティティに対する

[Table("Project")] 
public class Project { 
.... 
} 

アノテーションを使用することができ、またはOnModelCreating(DbModelBuilder modelBuilder)であなたはmodelBuilder.Entity<Project>().ToTable("Project");を呼び出すことができます。

どちらも同じことをします。

+0

これらのうちのいずれかが私のテーブルのキー、制約、および関係を認識するか、これを明示的に述べなければなりませんか? – davenewza

+0

私は分かりません。 Entourage + Idの規約を使用していますが、テーブルを再マッピングすると問題が発生する可能性があります(IDKは申し訳ありません)。あなたのキーのKeyAttributeアノテーションを持っていて、これらをマッピングする機能と、モデルビルダーの関係があります。 – AlexC

9

genericクラスEntityTypeConfiguration(T)から継承するクラス(つまり、ProjectMap)を定義する必要があります。ここで、TProjectクラスです。このProjectMapクラスで は、明示的にテーブルのマッピングを定義することができます。

this.ToTable("Project", "dbo"); 

クラスProjectMapは、それが動作しない理由を私はwonderungてるあなたDbContextクラス

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new ProjectMap()); 
} 
+1

'EntityTypeConfiguration'に言及するために上書きされ、各モデルに対してマッピングがきれいに分離されています。 –

関連する問題