0

データベース ファースト アプローチを使用するために、EF を使用して新しい MVC プロジェクトを作成したいと考えています。

そこで、デフォルトのアカウントを作成し、ユーザーのモデル、コントローラー、およびビューを管理するウィザードを使用して、Visual Studio 2015 で新しい MVC 5.2.3 プロジェクトを作成しました。

接続文字列は一種の

Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-MyProject-20161112112119.mdf;Initial Catalog=aspnet-MyProject-20161112112119;Integrated Security=True" providerName="System.Data.SqlClient

そして、私はここにいくつかの問題があります:

  1. App_Dataプロジェクトのフォルダー内に mdf ファイルがないため、データベースがどこに行ったのかわかりません。

  2. アプリはデフォルトでコードファーストアプローチを使用していると思うので、明らかに変更したいと思います。アイデアは、セットアップ時に作成された内部プロジェクト db 内からテーブルをコピーし、db 最初のアプローチで使用する新しいデータベースに追加することです。しかし、既存のアプリ データベースが見つかりません (ポイント 1 を参照)。

  3. 上記の connstring で使用されているサーバー ( (LocalDb)\MSSQLLocalDB) に Management Studio 経由で接続できますが、conn string で言及されているものでさえデータベースがまったくありません。そして、ファイルはApp_Dataフォルダ内に存在しません

  4. MyProjectDbそのため、SQL Server Management Studio を使用してサーバー内に新しいデータベースを作成しlocalhost、db first アプローチに使用するつもりでした。

  5. MyProject.Database新しく作成したデータベースを使用するために、ソリューション内に新しいプロジェクトを作成しましたMyProjectDb

  6. プロジェクトプロパティのデータベース文字列に、ではなくMyProject.Databaseconnstring データソースが含まれていることを確認しました。問題は、なぜ私のものではなく、そのような奇妙なソースなのですか? そして、新しいdbプロジェクトにサーバー内にデータベースを作成させる方法は?(LocalDb)/ProjectsV13localhostlocalhostlocalhost

  7. 次に、データベース プロジェクト ([デバッグ] タブ) のプロパティを変更して、接続文字列localhostでデータソースとして使用し、新しいデータベースMyProjectDbを作成しました。

  8. 次に、データベース プロジェクトを右クリックしますMyProject.Database: [追加] > [新しいアイテム] > [テーブル]。テーブルを作成しました。

  9. SQL Server オブジェクト エクスプローラーのProjects-MyProjectフォルダーの下にデータベースが表示され、 SQL Server Management Studio 内のサーバーのMyProjectDb下に作成したデータベースが表示されるようになりました。localhost前者には私が作成したテーブルがあり、後者には [テーブル] の下にありません (もちろんテーブルを更新しました)。これは奇妙で、実際に同じデータベースなのか、VS が作成したデータベースを使用する代わりにデータベースをコピーしたのか混乱していますか?

  10. ソリューション エクスプローラーで Web プロジェクトを右クリックします。[追加] > [新しい項目] > [データ] > [ADO.NET Entity Data Model] で名前を指定し、次の画面でEF Designer from databaseオプションを選択します。[次へ] をクリックして、作成できる画面に移動しますNew connection。これをクリックすると、リストから選択できるサーバーはNICKO-PCサーバーだけです。(覚えておいてください:VSで作成したdbプロジェクトはデフォルトで(LocalDb)?ProjectsV13サーバーに設定されていました)挿入しようとすると、localhost元に戻りますが、データベースがリストにある利用可能なデータベースを展開すると、とにかくサーバーcosNICKO-PCと同じだ​​と思います。だから私はそれを選択して次に進みます。localhostMyProjectDb

  11. 画面が出Choose Your Database Objects And Settingsます。そして今、自分のMyProject.Databaseプロジェクトを使用して作成したテーブルが表示されません。より正確にするために選択するテーブルはありません。したがって、アプリケーションで使用する db エンティティを作成できないことは明らかです。

ハマった。

イベントの説明が混乱しないことを願っています。

賢い人が私がやりたいことをするのを手伝ってくれますか?

  1. Web プロジェクトが奇妙なサーバーで db ファイルを使用し、代わりに(LocalDb)\MSSQLLocalDBデータベース プロジェクトがそれを作成する理由がわかりません。(LocalDb)/ProjectsV13

  2. 独自の新しいデータベースを作成し、それを Web アプリとデータベース プロジェクトの両方に使用してから、データベース ファースト アプローチに基づいてエンティティを作成するにはどうすればよいですか?

  3. データ エンティティ ウィザードでテーブルやその他のオブジェクトを取得する方法 アプリ内でモデル エンティティを作成したいのですが?

これは基本的に私が必要とするものです。

Db First アプローチを使用してプロジェクトを作成する方法を教えてください。VS スタジオ ウィザードではどこにも行けません。

ありがとうございました

* 編集 *

私の DbContext クラスはかなり単純で、ユーザー モデルと一緒にインストールした MVC プロジェクトによって作成されます。

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

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

新しく作成した db に接続するために変更したことがわかるように、デフォルトの conn 文字列を指していますMyProjectDb

4

1 に答える 1

0

実際にサイトを実行して、データベースへのアクセスが必要なものにヒットしたら。Entity Frameworkがデータベースを作成する必要があります。あまりにも早く道を外れてしまったのではないかと思います。

とにかく、はい、デフォルトは最初にコードになります。または、より適切には、デフォルトは新しいデータベースを作成することです。古い「モデル ファースト」と「データベース ファースト」のアプローチは廃止されました。今のところはまだ使用できますが、長期的なサポートが必要な新しいアプリを構築する場合は特に、お勧めしません。とは言っても、「コード ファースト」という名前にもかかわらず、実際には既存のデータベースで使用することも、新しいデータベースを作成することもできます。既存のデータベースを使用するには、コンテキストを少し変更する必要があります。

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

    ...
}

次に、Web.config を編集し、接続先の既存のデータベースに接続文字列を追加します。そこに付けた名前が、上記のコードの「ConnectionStringName」の場所と一致していることを確認してください。

于 2016-11-18T14:57:37.220 に答える