0

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リクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。

4

3 に答える 3

0

SQL Server Expressを使用しており、アプリケーション内のapp_dataディレクトリにDBファイルを書き込んでいると思います。

于 2012-10-18T21:15:46.747 に答える
0

これは「Convention over Configuration」と呼ばれ、Entity Framework や MVC ではこの原則がよく使われています。基本的には、特に指示を出さない限り、さまざまな慣習を前提としていると書かれています。

EF に接続文字列を指定しない場合は、名前空間とクラスの名前から生成された既定の接続文字列が使用されます。それが web.config に存在しない場合は、C:\Windows\Microsoft.NET のフォルダー ツリーにある machine.config で定義されている DefaultConnection が使用されます。

于 2012-10-18T21:20:57.563 に答える
0

マシンに SQL Express がインストールされていますか? Entity Framework のどのバージョンを使用していますか? 私が知る限り、文字列接続が提供されていない場合、Entity Framework はローカルの SQL Express をデフォルトの接続文字列としてターゲットにします。

于 2012-10-18T21:18:44.457 に答える