ASP.NETMVC3チュートリアルを実行しています。EnityFrameworkがモデルクラスに使用されるようになりました。web.configに接続文字列を指定せずにアプリケーションを実行したところ、機能しました。
レコードを追加、編集、削除できます。そして、最も奇妙なことは、開発サーバーを停止してアプリケーションのデバッグを再開した後でも、テーブルがメモリ内のどこかに作成され、何らかの理由で存続しているかのように、それらがそこにあることです。誰かが何が起こっていたのか説明できますか?
画像へのリンクは次のとおりです:oi48.tinypic.com/fnbeba.jpg
名前がDbContextから派生したクラスの名前と一致する接続文字列を使用することになっていますか?
編集1:
web.configに接続文字列がなかったため、名前空間とDBContextから派生したクラスの名前を使用してEnityFrameworkによって生成されました。デフォルトでは、EFはSQL Expressを使用するため、データベースファイルはデータベースサーバーのDATAディレクトリC:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL\DATAに作成されました。
DBContext派生クラスが次の場合にApp_Dataディレクトリにデータベースファイルが作成されない理由がわかりません。
public class MoviesDBContex : DbContext
{
public DbSet<Movie> Movies { get; set; }
// Passing name of the connections string shouldn't be even necessary
public MoviesDBContex()
: base("MoviesDBContex")
{ }
}
およびweb.configには
<connectionStrings>
<add name="MoviesDBContext"
connectionString="Data Source=|DataDirectory|Movies.sdf"
providerName="System.Data.SqlClient"/>
</connectionStrings>
これは、ER接続とモデルに関するMicrosoftガイド(msdn.microsoft.com/en-us/data/jj592674.aspx)の内容です。
接続文字列の名前がコンテキストの名前と一致する場合(名前空間の修飾の有無にかかわらず)、パラメーターなしのコンストラクターが使用されると、DbContextによって検出されます。接続文字列名がコンテキストの名前と異なる場合は、接続文字列名をDbContextコンストラクターに渡すことにより、コードファーストモードでこの接続を使用するようにDbContextに指示できます。
App_Dataにデータベースファイルが作成されない理由はありますか?
EDIT2:
クラス名に「t」がないため、接続文字列の名前と一致しませんでした。
プロバイダーがSQLServerCompactのproviderName="System.Data.SqlServerCe.4.0"の場合、期待どおりに機能しますが、providerName = "System.Data.SqlClient"に変更すると、以下に例外が追加されます。通常のSQLServerでもデータベースファイルを作成できるべきではありませんか?
SQL Serverへの接続の確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、およびSQLServerがリモート接続を許可するように構成されていることを確認してください。(プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開くことができませんでした)
説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。