2

アプリを構築する際に複数のアプローチをテストしたかった (DB ファースト、モデル ファースト、コード ファースト)。T4Scaffolding を使用し、変更後の DB に多くの問題が発生した後、私は EF が十分に柔軟ではないと考えました。今、私は非常に奇妙なものを見つけました。Web.Config で指定された単一の 'DefaultConnection' を残して、ソリューションの App_Data フォルダー内の単一の .mdf ファイルを指しています。Code-First アプローチを使用して、エンティティ (クラス) を作成し、次にスキャフォールディング リポジトリ、コンテキストを作成しました。DB を「削除」して更新する前に保存されたデータを取得することを除いて、すべてがほぼ正常に機能しているようです。しかし、VS サーバー エクスプローラーでチェックした後、データベースには ID (ユーザー、ロール) に使用されるテーブルのみが含まれており、実際のデータベースは別の場所にあることがわかります。'C: にあると思われます。\Users{MyUser}\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances'. しかし、既に使用されているため、そこから .mdf ファイルを開いて確認することはできません。ハマった。私のデータはどこにありますか???

アプリケーションに 2 つのコンテキストがあることを忘れていたため、PM コンソールに次のような警告が表示されます。「アセンブリで複数のコンテキスト タイプが見つかりました...」

ただし、最初は「ApplicationDbContext」であり、Identity DB のみを参照します。

public class ApplicationUser : IdentityUser
{
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
}

2 番目のコンテキストは、Web.Config からの単一の DB 接続にバインドされ、ビジネス ロジック エンティティを持ちます。

4

1 に答える 1

1

少し奇妙です。接続文字列は Web.Config から選択され、そこにある必要があります。再確認してください。また、既定では、EF は App_Data フォルダーにデータベースを作成します。そのフォルダを検索できます。また、複数のコンテキストで作業するのが面倒な場合は、すべての DbSet を ApplicationDbContext にコピーするだけで問題なく動作するはずです。

編集:次 のような他のコンテキストに同じCSを指定できます:

namespace MvcProject 
{     
    public class NorthwindDb : DbContext     
    {         
        public NorthwindDb() : 
            base("DefaultConnection") {}
    }
}  

ここで、基本クラスのコンストラクターを呼び出すときに、接続文字列の名前を渡すことができます。デフォルトでは、Identity は DefaultConnection を使用し、これをコンテキストに設定できます。

于 2014-01-31T17:10:15.480 に答える