2011-09-10 13 views
2

私はコードの最初のアプローチでMVC3を使用しています。この場合、既存のデータベースからエンティティクラスを生成する必要がありました。MVC3でのデータベース接続の問題

私はそれがDBEntitiesを作成し、このような何かを見て、私のWeb.configファイルに新規たconnectionString追加、ということでしたら、データベースが

Database1.mdf

た:今

<add name="DATABASE1Entities" connectionString="metadata=res://*/Models.Task.csdl|res://*/Models.Task.ssdl|res://*/Models.Task.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\DATABASE1.MDF;integrated security=True;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

を私はDB Entitiesを削除し、自分のDB Contextクラスを思いついた。

今、私は次のように働いていたconnectionString:私のDBcontextクラスの

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 

名前はTaskContextです。

私はこの問題をどうしたらいいのか分かりません。私のコードが動作します。しかし、それはいくつかの空のデータベースで動作し、database.mdfのanydataを反映しません。コントローラを使って何かを追加すると、それが追加されているのがわかります。しかし、Databse1.mdfには反映されません。

これは、独自のデータベースを作成したものとみなされます。しかしどこでも作成されたandy .sdfまたは.mdfファイルは表示されません....何が起こっているのか分かりませんか?

+0

こんにちは、私はちょうどEDMXファイルを持っていることに気づきましたdatabase1model.storeのようなものです。私はそれが私の問題と関係があるかどうか疑問に思う? – TeaLeave

+0

あなたのコードが動作すると述べました。あなたのアプリケーションから何かを追加すると、それがDBに追加され、後でこの情報をDBから取得できるということですか? – itsmatt

答えて

2

TaskContextとして接続文字列の名前が同じで行います

<add name="TaskContext" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" /> 

OR、次の手順を実行して、お気に入りのconnectionStringNameを使用することができます。

の1-あなたがしていますTaskContextオブジェクトを作成し、それを変更します。connectionString

あなたの コンテキストクラス( TaskContext)で
var cn = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString; 
// or 
var cn = WebConfigurationManager.ConnectionStrings[0].ConnectionString; // use your connection index instead of 0 
var _context = new TaskContext(); 
_context.Database.Connection.ConnectionString = cn; 

2 -、あなたは にModelBuilderのに伝える必要があり、このコードによってIncludeMetadataConvention を削除します。

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
    base.OnModelCreating(modelBuilder); 
} 
2

接続文字列とDBContextの名前を同じにしてください。私はある時点でEFコードファーストでは多くの表記規則を採用しているので、DBコンテキスト(あなたのケースでは「TaskContext」)という名前の接続文字列が見つからない場合、SQLExpressに接続しようとしますインストールされているものが1つあります)、データベースの検索または作成が試行されます。

SQLExpressがインストールされていると仮定しています。 C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\には何がありますか? (私はそれが道だと思います)このプロジェクトにはDBがありますか?たぶん[YourNamespace] .TaskContext.dbfのようなものでしょうか?

+0

あなたが正しいです、それはあなたが言及した場所に.MDfファイルを追加します。私はプロジェクトを作り直さなければならなかった。今、それは動作します。 – TeaLeave