0

ASP.NET MVC 4用のサンプルMvcMovieチュートリアルを作成しています。EntityFrameworkCodeFirst機能を使用して、次のようにconnectionStringを作成しました。

<add name="MoveDBContext"
     connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDictionary|\Movies2.mdf;Integrated Security=True"
     providerName="System.Data.SqlClient"
/>

この時点ですべてが正常に機能しました。しかし、その後、接続文字列にMovieDBContextではなくMoveDBContextという名前を付けたことに気付き、完璧主義者であるため、名前を変更しました。これを行った後、MoviesController/Indexメソッドでエラーが発生しました。

 public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    public ActionResult Index()
    {
        return View(db.Movies.ToList()); // Error: Invalid value for key 'attachdbfilename'
    }
...
}

名前をMoveDBContextに戻すと、エラーはなくなります。

この元の名前が参照されている場所を誰かに教えてもらえますか?

4

2 に答える 2

2

EFは、デフォルトで、DbContextを拡張するタイプと同じ名前の接続文字列を検索します。

または、スコットの方がいいでしょう:

デフォルトでは、EFコードファーストを使用してDbContextクラスを作成すると、コンテキストクラスの名前と一致する接続文字列が検索されます。コンテキストクラスに「NerdDinners」という名前を付けたため、ASP.NETアプリケーション内でインスタンス化されるときに、デフォルトで上記の「NerdDinners」データベース接続文字列を検索して使用します。

編集:

よく見てみると、接続文字列が問題だと思います。DataDictionaryの代わりに持っていますDataDirectory。これを試してください(読みやすくするためにラインフィードが追加されています):

<add name="MovieDBContext" 
     connectionString="Data Source=(LocalDB)\v11.0;
                       AttachDbFilename=|DataDirectory|\Movies.mdf;
                       Integrated Security=True" 
     providerName="System.Data.SqlClient" />
于 2013-03-12T17:14:04.713 に答える
0

どうやら、ケンが言ったように、MoveDBContextは参照されていませんでした。

web.configからconnectionString全体を削除しましたが、すべてが正しく機能していました。

それでも、「Visual StudioはSQLExpressインスタンスにデータベースを作成することをどのようにして知ったのですか?」という疑問が残ります。と「それはどこで構成されていますか?」

于 2013-03-13T18:56:58.560 に答える