16

OnModelCreatingテーブルなどを構成できるようにEF4.1が呼び出されないという問題があります。既存のデータベースがあります。これが私の接続文字列です:

<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です:

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

 }

私はオンラインで読んだり読んだりしましたが、何が問題なのか指摘できません。はOnModelCreating呼び出されないため、何かをクエリしようとすると、エンティティ/クラス(Vehicle、VehicleMake、VehicleModel)が現在のコンテキストに存在しないという例外が発生します。

4

1 に答える 1

23

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

<add name="AcmeDBContext"
     connectionString="data source=[server];
                       initial catalog=Acme;integrated security=True;
                       multipleactiveresultsets=True;App=EntityFramework"
     providerName="System.Data.SqlClient" />
于 2011-10-24T13:59:55.223 に答える