1

最近EF4.3.1から4.4にアップグレードしたところ、奇妙なことが起こり始めました。アップグレードしてからコードに触れたので、この問題の原因が100%確実であるとは言えません。

とにかく、既存のデータベースを吹き飛ばしてPMコンソールからUpdate-Databaseを呼び出すと、データベースが作成されますが、コンテキストの完全修飾名が使用されます。つまり、MyProject.Data.MyContext。以前は、MyContextというデータベースを作成しただけでした。テスト目的でデータベース内の大量のデータを初期化できますが、アプリを実行すると、データベースに何もないと表示されます。

データベースを見ると、(過去のように)MyContextという別のデータベースがあることがわかります。そのデータベースのテストデータを初期化すると、アプリは正常に実行され、データが表示されます。

OnModelCreatingメソッドをオーバーライドしています。基本的には次のようになります。

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {//My modelBuilder stuff.
base.OnModelCreating(modelBuilder);}

この方法はあまり変わっていないので、それが原因ではないと思います。誰かが以前にこの問題に遭遇したことがありますか?私のコードをもっと投稿してほしい場合はお知らせください。

4

2 に答える 2

1

コードを検索して、DbContextを実装しているクラスが2つないことを確認します-スキャフォールディングを使用しているときにこれに遭遇しました。

コンテキストを開き、次のように接続文字列を使用して明示的に設定してみてください。

    public myContext()
        : base("name=DefaultConnection")
    {
    }

web.configをチェックして、EF設定と接続文字列に奇妙なものがないかどうかを確認します。

于 2013-02-16T15:02:03.957 に答える
1

さて、EFコードファーストを使用しているので、app.configファイルを吹き飛ばす必要があることがわかりました。 私はデータベースファーストのアプローチから始めましたが、それをコードファーストに変更しました。app.configファイルを吹き飛ばすと、正しく機能しました。update-databaseコマンドで1つのデータベースを作成し、コードで同じデータベースを使用するだけでした。

ああ、次のようにコンテキストコンストラクターでデータベース名を設定できました。

MyContext() : base("MyDatabase") { }
于 2013-02-24T16:06:18.843 に答える