1

エンティティ フレームワークを SQL サーバーと共に使用するのは初めてなので、エンティティ フレームワークに問題があります。EMP というエンティティを使用してエンティティ データ モデルを作成することに成功しました。EMP には、スカラー プロパティとして ID、名前、および給与があります。次に、モデルからデータベースを生成し、結果の sddl をコピーして SQL サーバーに貼り付け、データベースを作成しました。VS 2010 Express に戻り、次のコードを使用してデータベースにいくつかのレコードを追加しようとしました。

string constr = ConfigurationManager.ConnectionStrings["dataemp"].ConnectionString;
dataemp db = new dataemp(constr);

db.AddToEmps(Emp.CreateEmp(0, "john", "Informatique", "10000000 cfa"));
db.AddToEmps(Emp.CreateEmp(1, "johny greg", "finances", "100000000 cfa"));

db.SaveChanges();//i get the error here
Console.WriteLine(
  "*********Employee actuellement dans la database*********\n{0}",
  query.ToString());

その結果、コンパイラは、データベースに接続していないか、データベースにアクセスできなかったかのように例外を返しますが、データベース エクスプローラーには表示されます。データベース エクスプローラーでのもう 1 つのポイント: テーブル (EMP) が表示されませんが、SQL Server では dbo.Emps として表示されます。コンパイラが私に示す例外は次のとおりです。

未処理の例外: System.Data.UpdateException: エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。---> System.Data.SqlClient.SqlException: 無効なオブジェクト名 'dbo.Emps'。
System.Data.SqlClient.SqlConnection.OnError (SqlException 例外、ブール型 breakConnection) で System.Data.SqlClient.SqlInternalConnection.OnError (SqlException 例外、ブール型 breakConnection) で System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() で System.Data System.Data.SqlClient.SqlDataReader.ConsumeMetaData() の System.Data.SqlClient.SqlDataReader.get_MetaData() の .SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj)。 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) の System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior の動作、String メソッド) の Bo olean returnStream、String メソッド) System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior の動作) の System.Data.Common.DbCommand.ExecuteReader(CommandBehavior)行動)SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Bo olean returnStream、String メソッド) System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 動作、String メソッド) で System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 動作) System.Data.Common.DbCommand.ExecuteReader (CommandBehavior 動作) でSqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Bo olean returnStream、String メソッド) System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 動作、String メソッド) で System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 動作) System.Data.Common.DbCommand.ExecuteReader (CommandBehavior 動作) で
System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator トランスレーター、EntityConnection 接続、Dictionary 2 identifierValues, List1 generatedValues) で System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager、IEntityAdapt er アダプター) で -- - 内部例外スタック トレースの終了 --- System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) で System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) で System.Data
D:\Users\ITA Final\documents\visual studio 2010\Project s\zut\zut\Program.cs:line 13 の ConsoleApplication1.Program.Main(String[] args) の.Objects.ObjectContext.SaveChanges(SaveOptions options)

エンティティ フレームワークとエンティティへのリンクに関する多くのチュートリアルを読みました。ここで何が間違っているのかわかりません。

4

2 に答える 2

0

データベースに存在しないものに問題があり、接続不良を示している場合、および接続文字列を考えると、

connectionString="metadata=res:// /Model1.csdl|res:// /Model1.ssdl|res://*/Model‌ 1.msl;provider=System.Data.SqlClient;provider connection string='データ ソース=.\SQLEXPRESS;AttachDbFilename="D:\Users\ITA Final\Documents\Visual Studio 2010\Projects\employee.mdf";統合セキュリティ=True;接続タイムアウト=30;ユーザー インスタンス=True;MultipleActiveResultSets=True'"

ADO が使用する実際の接続文字列は次のとおりです。

Data Source=.\SQLEXPRESS;
AttachDbFilename="D:\Users\ITAFinal\Documents\Visual Studio 
    2010\Projects\employee.mdf";
Integrated Security=True;
Connect Timeout=30;
User Instance=True;
MultipleActiveResultSets=True

Initial Catalog接続文字列にコンポーネントがないのはなぜだろうか。接続する MDF ファイル内の正しいデータベースを決定し、含める必要があります。

Initial Catalog=MyDbName;

文字列で。駒の直後Integrated Security=True;が置きやすい場所です。

于 2013-08-23T20:25:52.757 に答える
0

このエラーが発生する唯一の方法は、接続先のデータベースにテーブルが存在しないことです。コンテキストに使用している接続文字列が正しくありません。これは、WebまたはApp構成ファイルの接続文字列の値が間違っている場合、またはその接続文字列を手動で設定して間違った設定をしている場合に発生する可能性があります。

于 2013-08-23T19:59:50.040 に答える