2011-10-24 15 views
16

EF 4.1に問題があります。OnModelCreatingを呼び出さないため、テーブルなどを構成できます。既存のデータベースがあります。ここに私の接続文字列は次のとおりです。私は読み、オンライン読みましたEF 4.1 OnModelCreatingが呼び出されていない

public class AcmeDBContext : DbContext 
{ 
    public AcmeDBContext() 
    : base() 
    { 
    Database.SetInitializer<AcmeDBContext>(null);   
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();  
    modelBuilder.Entity<Vehicle>().ToTable("tblVehicle"); 
    modelBuilder.Entity<VehicleMake>().ToTable("tblVehicleMake"); 
    modelBuilder.Entity<VehicleModel>().ToTable("tblVehicleModel"); 
    base.OnModelCreating(modelBuilder); 
    } 

} 

が、私は、問題が何であるかを指摘することはできません。ここで

<add name="AcmeDBContext" 
    connectionString="metadata=res://*/|res://*/|res://*/; 
         provider=System.Data.SqlClient; 
         provider connection string=&quot; 
         data source=[server]; 
         initial catalog=Acme;integrated security=True; 
         multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

DbContextから継承された私のクラスです。 OnModelCreatingは決して呼び出されないので、何かをクエリしようとするとエンティティ/クラス(Vehicle、VehicleMake、VehicleModel)が現在のコンテキストに存在しないという例外があります。

+0

どのようにしてコード内にコンテキストのインスタンスを作成していますか? – Yuck

答えて

22

2つのアプローチを併用しています。接続文字列には、EDMXで最初にモデルまたはデータベースを使用したいが、データベースをマップするには最初にコードを使用するコンテキストを記述しています。一度EDMXを使用すると、OnModelCreatingは呼び出されません。 OnModelCreatingを使用する場合は、メタデータリソースなしで一般的なSQL接続文字列を使用します。

<add name="AcmeDBContext" 
    connectionString="data source=[server]; 
         initial catalog=Acme;integrated security=True; 
         multipleactiveresultsets=True;App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 
+0

だから、もし私が選択肢があるとは思わない、DataBase Firstを使いたいのであれば、どこでクラス名をテーブル名にマップするのですか?テーブル名と同じクラス名を使用する必要がありますか?申し訳ありませんが、以前はNHを使用していましたが、EFではなく、FluentNHでクラスをテーブルに簡単にマップできました – ASR

+0

メタデータ情報を削除しても、動作は変わりません!! OnModelCreatingはまだ呼び出されません。 – ASR

+0

データベースファーストを使用する場合は、EDMXファイルを作成します。既存のデータベースからこれを作成するオプションがあります。最初のインポート後、必要に応じて完全に変更できる基本エンティティモデルが用意されています。次に、エンティティ・フレームワークは、エンティティ・モデルからデータベース・スキーマへのマッピングを実行します。参照してくださいhttp://msdn.microsoft.com/en-us/data/ff191186 –

関連する問題