4

ドメインモデルクラスに2つの新しいプロパティを追加し、それに応じてデータテーブルに2つのプロパティを追加しました。次に、MVC Webアプリケーションを起動しようとしましたが、

The model backing the 'EFDbContext' context has changed since the database was created.  
Consider using Code First Migrations to update the database  
(http://go.microsoft.com/fwlink/?LinkId=238269).

次の投稿を読んだこと:

MVC3とコードファーストの移行

EF4.3自動移行ウォークスルー

パッケージマネージャーコンソールUpdate-Databaseを使用しようとしましたが、エラーが発生しました

Get-Package : Не удается найти параметр, соответствующий имени параметра "ProjectName".
C:\Work\MVC\packages\EntityFramework.5.0.0\tools\EntityFramework.psm1:611 знак:40
+     $package = Get-Package -ProjectName <<<<  $project.FullName | ?{ $_.Id -eq 'EntityFramework' }
+ CategoryInfo          : InvalidArgument: (:) [Get-Package], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,NuGet.PowerShell.Commands.GetPackageCommand

The EntityFramework package is not installed on project 'Domain'.

ただし、Entityframeworkはプロジェクトドメインにインストールされています。参照から削除し、package.configを削除して、EFを正常に再インストールしました。しかし、Update-Databaseそれでも同じエラーを返します。Update-Database -Config同様に行います

私は何が間違っているのですか?

編集

Ladislav Mrnkaに感謝します、私は私の質問を言い換えようとします。データテーブルを手動で変更した限り、移行を使用することは期待されていません。しかし、手動で編集したドメインモデルクラスとデータテーブルでEFを機能させるにはどうすればよいですか?

4

3 に答える 3

23

これをアプリケーションの起動に追加してみてください(に置くことができますApp_Start):

Database.SetInitializer<EFDbContext>(null);

EFからのデータベースの処理に関連するすべてのロジックをオフにする必要があります。これで、データベースをモデルと同期させる責任が完全になくなります。

于 2012-08-22T07:45:56.947 に答える
2

私は同じ問題を抱えていました、そしてこれは私が問題を修正した方法です。

sqlコマンドを使用してテーブル__MigrationHistoryを削除し、update-database-verboseを再度実行しました。

どうやら、この自動作成されたテーブルに何か問題がありました。

于 2013-07-19T06:00:26.073 に答える
0

答え2はまさに必要なものでした。App_Startにアクセスしたとき、4つの構成ファイルがあることに気付き、これらのファイルのどこに収まるかわかりませんでした。代わりに、EFデータベースコンテキストに追加しました

namespace JobTrack.Concrete
{
    public class EFDbContext : DbContext 
    {
        //Set the entity framework database context to the connection name
        //in the Webconfig file for our SQL Server data source QSJTDB1
        public EFDbContext() : base("name=EFDbConnection")
        {            
        }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Remove the tight dependency on the entity framework that 
        //wants to take control of the database. EF by nature wants
        //to drive the database so that the database changes conform
        //to the model changes in the application. This will remove the
        //control from the EF and leave the changes to the database admin
        //side so that it continues to be in sync with the model.
        Database.SetInitializer<EFDbContext>(null);

        //Remove the default pluaralization of model names
        //This will allow us to work with database table names that are singular
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();            
    }

    //Allows for multiple entries of the class State to be used with 
    //interface objects such as IQueryTables for the State database table  
    public DbSet<State> State { get; set; } 

}

}

于 2014-01-29T02:56:42.053 に答える