2017-01-05 11 views
0

私はmvc.netを学びたいと思っています。私はモデルの最初のアプローチを使用して小さなプロジェクトを作成しました。データベースをApp_Dataフォルダに移動した後の接続文字列の変更?

http://www.dotnetfunda.com/articles/show/2182/how-to-embed-sql-database-in-appdata-folder

は、一言で言えば、私は、データベースをデタッチしてから、私はApp_Dataにフォルダ内のデータベースが含まれています。問題は、私は私がこの記事を踏襲しているためApp_Dataフォルダに示されていることを私のデータベースを望んでいます。今私は、接続文字列を変更することで問題に直面しています、以前私は、エンティティフレームワークを使用して自動的に接続文字列を生成し、それはのようだった:

<add name="KeepitrememberEntities" 
connectionString="metadata=res://*/EDM.csdl|res://*/EDM.ssdl|res://*/EDM.msl; 
provider=System.Data.SqlClient;provider connection string=&quot; 
data source=mypcname\SQLEXPRESS;initial catalog=Keepitremember; 
integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient" /> 

、今私はそれを変更する:私は実行していた場合

<add name="KeepitrememberEntities" 
connectionString="Data Source=mypcname\SQLEXPRESS; 
AttachDbFilename=|DataDirectory|Keepitremember.mdf;Integrated Security=True; 
User Instance=True" 
providerName="System.Data.SqlClient" /> 

EDM.Context.csとエラーのコードとフォームを使用して値を保存しようと、それは私に見せてエラーがある:タイプ0123の

例外「System.Data.Entity.Infrastructure.UnintentionalCodeFirstException」 はEmptymvc.dllで発生したが、ユーザーコードで処理されなかった

追加情報:コードが正しく動作しない可能性があり、データベースの最初の とモデル初の開発をT4テンプレートを使用して生成コードで使用されている場合 最初のモード。データベースファーストまたはモデルの使用を継続するにはを確実に実行するには、実行中のアプリケーションのファイル にEntity Framework接続文字列が指定されていることを確認します。これらのクラスを使用するには、 がデータベースファーストまたはモデルファーストからコードで生成されています。まず、属性またはDbModelBuilder API を使用して 追加構成を追加し、この例外をスローするコードを削除します。

何を解決する必要がありますか?

お時間をいただきありがとうございます。

答えて

0

私の知る限り、最初の接続文字列はEntity Framework接続文字列であり、2番目の文字列はSQL Express接続文字列です。 EFプロジェクトではDbContextのファイルweb.configとコード生成テンプレートの両方に存在する必要があります。したがって、これらは互換性がありません(つまり、EF接続文字列をSQL Expressに変更しないでください)。

CSDL、SSDL & EFがSQL Expressに必要とするMSL情報を含むEF接続文字列を変更したため、EFは既存のデータベースメタデータが存在しないとみなし、Code Firstのような新しいデータベースを作成しようとします。 OnModelCreatingメソッドの実行後にUnintentionalCodeFirstExceptionをトリガします。

代わりのweb.configにEFの接続文字列を変更し、ちょうどこれと同じconnectionStrings要素(あなたが必要なときに、最初のカタログ名を定義する必要があるかもしれません)に SQL Expressの接続文字列を追加します

<connectionStrings> 
    <!-- SQL Express connection string --> 
    <add name="KeepitrememberConnection" 
    connectionString="Data Source=mypcname\SQLEXPRESS;Initial Catalog=Keepitremember; 
    AttachDbFilename=|DataDirectory|Keepitremember.mdf;Integrated Security=True; 
    User Instance=True" 
    providerName="System.Data.SqlClient" /> 

    <!-- EF connection string --> 
    <add name="KeepitrememberEntities" 
    connectionString="metadata=res://*/EDM.csdl|res://*/EDM.ssdl|res://*/EDM.msl; 
    provider=System.Data.SqlClient;provider connection string=&quot; 
    data source=mypcname\SQLEXPRESS;initial catalog=Keepitremember; 
    integrated security=True;MultipleActiveResultSets=True App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 
</connectionStrings> 

NBを:接続文字列名は、と同じで、EFモデル生成スキーマ内の事前定義名を使用する必要があります。

関連問題:

Model First with DbContext, Fails to initialize new DataBase

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode

Entity Framework cant use the DbContext, model being created

関連する問題