2016-04-13 11 views
-2

ビジュアルスタジオでは、データを保存するための空調から新しいデータベースを作成します。VSは私のデータを他のデータベースに保存していますか?

public class LinkedDataContext : DbContext 
{ 
    public DbSet<LinkedData> LinkedData { get; set; } 
} 

エラーはスローされませんされて、私はちょうどスクリーンショットでトップの一つであり、私の最初に作成したデータベースとは異なり、SQL Serverのオブジェクトエクスプローラでのみ表示されている別のデータベースで終わる:これは私のDbContextです。

enter image description here

編集

私は、全体がMSSQL 2014サーバーにMVCプロジェクトによって生成されたデータベースをアカウント移行しました。データベースを追加して接続文字列を変更するだけで、データベースに必要なテーブルが自動的に設定されました。

私は自分のカスタムテーブルを、ローカルデータベースとまったく同じように作成しました。私は、ローカルデータベース、他の接続文字列とコントローラを削除しました。その後、プロジェクトを再構築してコントローラを再作成しました。しかし、VS/MVC/EFの責任者は、自分のカスタムデータ用のローカルデータベースを作成しています。

コントローラを作成すると、MSSQL SERVER 2014でテーブルが見つかったようです。そうしないと、SQLファイルをローカルに格納するための安全なダイアログが表示されます。だから実際にここで何が起こっているのですか?私が言ったように、アカウント機能は瞬時に魅力的に機能しました。 MSSQLの私のカスタムテーブルは単に使用されません。

EDIT

だから、私はMSSQL SERVERの2014年にWeb.configDefaultConnectionFactoryを設定し、今では私のMSSQLサーバー内に新しいデータベースを生成しています。それはネームスペースのようですが、コントローラを作成すると、ModelクラスとContextクラスの両方のネームスペースを渡す必要があります。

Model class: LinkedData (DataVisualization.Models) 
Data context class: LinkedDataContext (DataVisualization.Models) 

は私のカスタムデータを保持するために、自動的に生成され続けるのデータベースが呼び出されますDataVisualization.Model.LinkedDataContext

本当にここで何が起こっているのか誰も知っていますか?

+0

MVCはどのような意味で関連していますか? RUnningコードは、MVC固有の質問をしません。ここでは、MVC固有の質問に関連する1行は表示されません。デバッグを検討しましたか? – TomTom

+0

@TomTomまあ、私はモデルとビューを作成するコントローラを追加します。これはMVCの省略形です。私はエラーが発生していない、それはちょうどあなたがスクリーンショットで見ることができるように新しいDBを作成し、レコードを作成するたびに、データを保持すると思われるデータベースの代わりにレコードを作成します。 – Madmenyo

+0

「ビュー」が「単なるクラス」(少なくとも質問に関連するタイプ)であり、コントローラで何もしないので、問題はありません。関連するコードをコマンドラインアプリケーションに簡単にコピー/貼り付けることができます。質問は100%同じです。 Ergoでは、サイトルール(最短のコードが可能)ごとにコードサンプルを提供することができません。 asp.netがゼロASPを持つので、これは含まれません。質問に関連するネット固有のもの。エルゴは投票を終了する。 – TomTom

答えて

-1

スタンダードビヘイビア。それほど悪いです。 「デバッグ」ボタンを押すたびにdbテンプレートがランタイムにコピーされるため、常に新しいデータベースから開始します。地獄のような苦痛。どのように他の人がこれを解決するかわからない - 私はVisual Studioのこの側面を使用することはありません、私はSQL Serverをインストールし、そこに自分のデータベースを手動で作成する。私はいつも定義されたコピーに対して働いていることを確認します。明らかにVSはそこにデータベースを作成する権利がありません;)

Googleを使用して迷惑をかけたり、サイトの検索を少しおこなうと、同様の質問がたくさんあります。これは人々が定期的にトラップしてしまいます期待する。

(私に尋ねると、ほとんどの基本機能をほとんど使用できない「移行」を含めて、EFのDBメンテナンス側が壊れています)。

+0

私は私のバカを探しました。しかし、私はそれがEFの問題であることを認識していなかったので、 "VSを別のデータベースに入れてVS"を検索すると、関連するものはあまり得られません。しかし、私はチュートリアルを実行していたときに昨日働いていましたが、これは時々起こることでしょうか? – Madmenyo

+0

私はデータベースを毎日扱っているが、私はこれらの自動化を買ったことがないので、ほとんど考えていない。私は複雑で時には大規模なデータベース作業を行います。環境の完全なコントロールは常に重要なので、私はそれらの自動化に買収したことはありません。しかし、多くの人が、デバッグ時にビジュアルスタジオのデータベース管理の振る舞いを持つ事実を突き止めています。私が言ったように - 私はそれらをバイパスします。 – TomTom

+0

私の問題を調べてくれてありがとう。私はおそらく同じことをするでしょう、私は多くの年前にSQL Serverを使用したので、私が推測する大きな問題ではないでしょう。しかし、それはまた、おそらくMVCに付属のユーザーアカウントデータベースを移行する必要があることを意味します。私はこれを今のところ開いたままにして、別の答えが来るかどうかを見ます。私は本当に完全なコントロールは必要ありません。 – Madmenyo

0

あなたのWeb.configの接続文字列と思われます。あなたのプロジェクトの外既存のデータベースからDbContextを作成すると、Visual Studioは、あなたが選択した接続が 現在のプロジェクトにないローカルデータファイルを使用しています

を求められます。ファイルをプロジェクトにコピーして、 接続を変更しますか?

[はい]を選択すると、データベースファイルがプロジェクトにコピーされ、ビルドアクションがコンテンツに設定され、接続文字列に相対参照が設定され、ビルド時に出力ディレクトリにコピーされます。

Web.configのを修正して正しいデータベースを指定する必要がある場合は、設定する必要があります(将来参照するには、コピーするかどうかを尋ねられたら尋ねられます)。バイナリで配布しているデータベースファイル)。

例として、以下の2つの接続を参照してください。あなたは第

<connectionStrings> 
    <add name="ProjectContext" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\Database.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
    <add name="ExternalContext" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=C:\Programming\.Net\DataVisualization\Data\DataVisualization\App_Data\Database.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

connectionStringの実際の構文が使用されている設定に応じて、お使いのアプリで異なる場合があることに注意が、重要な部分を選択した場合は、あなたが選択した場合は、[はいProjectContextのようなものを参照するか、ExternalContextようなものでしょう|DataDirectory|の参照と正しいパスです。パスは変更する必要があります。

+0

私はそのメッセージをalに届かない。それ以外は、私はアカウントデータベースのために働いている接続文字列を1つだけ使用しています。モデルを表すテーブルを追加するだけで、コントローラがそのモデルにフックします。しかし、私はアプリを実行すると、何とか新しいデータベースを作成したい。 – Madmenyo

+0

それはおそらく、TomTomが言及した行に沿った他の機構設定です。しかし、上記のように 'Web.config'を修正することで正しいデータベースを使用できるようになるかもしれません。あなたの 'Web.config'にはどんな接続文字列がありますか? – Tone

+0

'connectionString ="データソース= ... \ SQLEXPRESS;初期カタログ= DataVisualization;統合セキュリティ= True "'このアカウントは問題なく動作します。しかし、私自身のテーブル、モデル、コントローラを追加しようとすると、EFはテーブルを持つ新しいデータベースを作成してレコードを保持します – Madmenyo

0

速記ソリューションはこれです:

public class LinkedDataContext : DbContext 
{ 
    public DbSet<LinkedData> LinkedData { get; set; } 
    public LinkedDataContext() : base("DefaultConnection") 
    { 
    } 
} 

私はコンテキストにちなんで名付けられた接続が存在しない場合、デフォルトの接続を取るだろうと仮定しました。その理由は、接続が正常だったのでエラーが発生しなかったからです。しかし、web.configにconnectionStringを指定しないと、データベースを見つけてその名前空間をスローして、細い空から新しいデータベースを作成するので、デフォルトの文字列の一部分を使うように見えます。私はMVCに新しいかもしれないが、私はこのばかげたデフォルト動作を見つける。だから私はまだこれの背後にあるアイデアは何かを知りません。

相当なサイズのアプリケーションに対して数百の接続文字列を使用したいのでない限り、親コンストラクタを呼び出してそこにDefaultConnectionを指定することしかできないようです。皮肉なことに、デフォルトの動作を「指定する」必要があります。

@tomtomとは違って、私は約10時間で私に似た単一のシナリオを見つけられませんでした。たぶん私ははっきりしていなかったかもしれませんが、私の最初の記事では、私が取った各ステップを指定しました。 MSSQL SERVERを使用する必要はありません。

これは他の誰かを助けることを望みます。

関連する問題