4

私はASPMVC3の初心者で、いくつかのチュートリアルを行っています。今、私はサイトを構築しようとしています。Microsoft Webサイトのすべてのチュートリアルでは、コードファーストのアプローチを強調しています。コードを使用してモデルを定義し、データコンテキストを作成してから、エンティティフレームワークがコードに基づいてDBを作成/管理します。

DbContextから継承するEmployeesクラスとDataBaseContextクラスを設定しました。SQLサーバー上の既存の空のDBに DataBaseContextを正常にリンクする接続文字列をWeb.config接続文字列に追加しました。EDIT=それが問題でした。以下の私の答えを参照してください

しかし、scaffoldを介して作成されたEmployeesコントローラーを実行しようとすると、このエラーが発生します

Invalid object name 'dbo.Employees'. 
Description: An unhandled exception occurred during the execution of...
Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.Employees'.

この投稿SqlException(0x80131904):無効なオブジェクト名'dbo.Categories'に従い、DBにemployeesテーブルを作成すると、この例外がなくなることに気付きました(列名が無効であるという新しいものが表示されます)。

しかし、MVC 3の要点は、フレームワークがコードに基づいてDBを作成することだと思いました。

データベースを作成するには、Global.asax Application_start()に1行のコードが必要ですか?これが私のapplication_startメソッドです:

Sub Application_Start()
    AreaRegistration.RegisterAllAreas()
    RegisterGlobalFilters(GlobalFilters.Filters)
    RegisterRoutes(RouteTable.Routes)
End Sub

Employeeのコードは次のとおりです。

Public Class Employee

    Property EmployeeID As Integer
    Property First As String
    Property Last As String
    Property StartDate As DateTime
    Property VacationHours As Integer
    Property DateOfBirth As DateTime 'in case two employees have the same name

End Class

DBコンテキストのコードは次のとおりです。

Imports System.Data.Entity

Public Class DatabaseContext
    Inherits DbContext

    Public Property Employee As DbSet(Of Employee)
    Public Property AnnualLeave As DbSet(Of AnnualLeave)

End Class

私は何が欠けていますか?

4

6 に答える 6

2

デフォルトでは、EF はDropCreateDatabaseIfModelChanges<TContext>データベース初期化子を使用します。MSDNに従って:

その実装はIDatabaseInitializer<TContext>、データベースが作成されてからモデルが変更された場合にのみ、データベースを削除し、再作成し、オプションでデータを再シードします。これは、店舗モデルのハッシュを作成時にデータベースに書き込み、そのハッシュを現在のモデルから生成されたハッシュと比較することによって実現されます。

データベースは手動で作成されたため、EF はハッシュを見つけることができず、それ以上の初期化ロジックを実行しないことを決定します。

于 2012-08-22T21:09:46.803 に答える
0

この記事をご覧になることをお勧めします。同じ質問はすでに正常に回答されています。または、これである可能性があります(これも正常に解決されました)あなたの問題に対する答えは、おそらく2つのうちの1つです。

これがあなたを助けることを願っています

于 2012-08-13T19:20:31.497 に答える
0

私はすでにSQLサーバー上にその名前のデータベースを作成していました。既存のデータベースを削除すると、コード ファースト フレームワークが想定どおりにテーブルを作成してくれました。データベースが既に存在する場合、フレームワークはテーブルをセットアップしないようです。DB全体をゼロから作成したいと考えています。

于 2012-08-16T19:32:49.257 に答える
0

MVC を使用した DbContext について書いたこの投稿があなたに役立つかどうか試してみてください: Code-First

これを機能させるために多くのことを行う必要はありませんが、見逃されがちなことがいくつかあり、頭痛の原因となります.

お役に立てれば

于 2012-08-14T18:59:17.760 に答える
0

接続文字列に指定している名前は、データベース コンテキストの名前と一致していますか?

例えば:

環境

var myDbContext = new MyDbContext();

接続文字列

<connectionStrings> 
    <add name="MyDbContext" connectionString="YOUR.CONNECTION.STRING" providerName="System.Data.SqlServer" /> 
</connectionStrings>
于 2012-08-14T07:25:27.963 に答える
0

あなたが使用していたAdventureWorks Database

従業員テーブルに割り当てられた独自のスキーマがあります。HumanResources.Employeesデフォルトではありませんdbo.Employees

HumanResources問題を特定しましたが、スキーマで構成されたデータベースを使用するための解決策がわかりません。

誰か知ってる?

于 2012-08-28T22:40:11.497 に答える