25

今日、私は多くのリファクタリングとクライアント マシンへの公開を必要とする、非常に厄介な DB を持つプロジェクトを維持しています。

データベースのスクリプトだけを含むSQL Server データベースプロジェクトを追加し、.dacpacクライアント データベースを自動的に変更できるようにするファイルを作成できることはわかっています。

また、フォルダーに.mdfファイルを追加するだけで、そこにデータベースを作成できることも知っています。既に存在するため、SQL Server なしでソリューションを起動できると思いますApp_DataSolution_DatalocalDb

そして最後に、エンティティフレームワークが独自の移行とともに存在することを知っています。しかし、私はそれを使用したくありません。なぜなら、移行でインデックスを追加および変更することができず、困難な移行シナリオを説明する必要があるときに柔軟性が足りないからです。

私の目標:

  1. クライアント DB への移行スクリプトを自動的に生成します。
  2. プロジェクトに参加した新しいプログラマーが自分のマシンに SQL Server をインストールする必要さえないように、私のソリューションを自己完結型にします。
  3. 1 ~ 2 回のクリックでローカル (開発) ベースを更新できます。
  4. データベースの変更履歴をさかのぼることができます (私は TFS サーバーを持っています)
  5. 最新の DB スキームを使用して、ソリューションにクリーンな (辞書またはルックアップ テーブルを使用する場合のみ) db を含めることができます。
  6. さらに、DB モデル ( EFまたは.dbml) を自動的に、または非常に簡単な方法で更新できるようにしたいと考えています。

だから私は何を尋ねるべきか:

  • 目標を達成したい場合、この 2 つのアプローチを使用することの長所と短所は何ですか?

  • このツールを組み合わせて使用​​する必要があるのでしょうか。

  • または、MS の他の既存のツールについて知りませんか?

  • この DB からDALモデルを更新する方法はありますか?

4

2 に答える 2

10

目標を達成したい場合、この 2 つのアプローチを使用することの長所と短所は何ですか?

データベース プロジェクトを使用すると、すべてのデータベース オブジェクトをバージョン管理できます。データベースを削除して再作成するのではなく、さまざまなデータベース インスタンスに公開し、変更を段階的に展開できるため、データが保持されます。これらの変更は、dacpac、SQL スクリプトの形式で行うことも、VS インターフェースを介して直接行うこともできます。展開前および展開後のスクリプトと公開プロファイルを使用して、展開を詳細に制御できます。開発者は SQL Server をインストールする必要があります (通常は開発者/Express エディションで十分です)。

LocalDB の方が操作が少し簡単です。公開せずに、データベースに直接変更を加えることができます。LocalDB には、変更を他のインスタンスにプッシュするための組み込みの発行プロセスがありません。SQL Server のインストールは不要です。

データベース オブジェクトのバージョン管理が必要な場合、複数のユーザーが同時に変更を行っている場合、または同じデータベースを使用する複数のアプリケーションがある場合は、データベース プロジェクトを使用します。これらの条件のいずれにも当てはまらない場合、または独自のスタンドアロン データベースを必要とする小規模なアプリの場合は、LocalDB を使用してください。

このツールを組み合わせて使用​​する必要があるのでしょうか。

はい。以下の Kevin のコメントによると、「データベース プロジェクトがスタートアップ プロジェクトとして設定されている場合、F5 キーを押すと自動的に LocalDB に展開されます。この場合、公開プロファイルは必要ありません。」

または、MS の他の既存のツールについて知りませんか?

Entity Framework の Code Firstアプローチが近づいています。

この DB から DAL モデルを更新する方法はありますか?

Entity Framework の POCO ジェネレーターは、DAL クラスに変更を加えない限りうまく機能し、次にジェネレーターを実行したときにそれらの変更は失われます。

データベース プロジェクトの SQL ファイルからクラスを生成できるSqlSharpenerという新しいツールがあります。私はそれを使用していないので保証できませんが、有望に見えます。

于 2015-05-13T12:40:18.073 に答える