ASP.NET MVC 4 を使用した Entity Framework 5RC
次のフィールドを含むテーブルがあります。
エディター nvarchar(200) nullable
アプリケーションで新しい EF モデルを生成し、モデルの図で [コード生成項目の追加...] を使用して POCO エンティティを生成しました。変更を保存し、ソリューションをクリーンアップして、ソリューション全体を再構築しました。アプリケーションを実行して、この種のエンティティを追加または編集しようとすると、EF5RC から次のように報告されます。
「列 'Editor'、テーブル '@T' に値 NULL を挿入できません。列は NULL を許可しません。INSERT は失敗します。ステートメントは終了しました。」
データベース テーブル フィールドは NULL 可能です。モデルに戻り、エンティティのこのフィールドを調べました。その "Nullable" は "(None)" に設定されていますが、これは奇妙です。私はそれが真であることを期待していたでしょう。これを True に設定し、モデルの変更を保存し、ソリューションをクリーンアップして、ソリューション全体を再構築しました。アプリケーションを実行すると、同じエラーが表示されます。この問題を回避できると思われる唯一の方法は、MVC コントローラーでこのフィールドをジャンク値に設定することです。
私のViewModelでは、このフィールドはCreateまたはEditアクションに渡されていません。
私のEFプロジェクトでは、このフィールドには次のように注釈が付けられています...必須として設定されていないことに注意してください。
[Display(Name = "Title_Editor", ResourceType = typeof(Resources))]
[StringLength(200, ErrorMessageResourceName = "Error_200CharactersOrLess", ErrorMessageResourceType = typeof(Resources))]
public string Editor { get; set; }
モデルからエンティティを削除し、ソリューションをクリーンアップし、エンティティと POCO クラスを再作成しようとしましたが、この問題は解決しません。
これは私には EF5RC のバグのように見えます... 他の誰かがそれに遭遇しましたか? EF 開発チームに報告するにはどうすればよいですか?
ありがとう、
マイク
** * ** * ** * **例外メッセージ* ** * ** * ** * **
System.Data.Entity.Infrastructure.DbUpdateException was caught Message=An error occurred while updating the entries. See the inner exception for details. Source=EntityFramework StackTrace:
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
at System.Data.Entity.DbContext.SaveChanges()
at ExpirationTrax.Domain.Repositories.EFCustomerRepository.Update(BaseCustomer customer) in C:\PROJECTS\ExpirationTraxMVC\ExpirationTrax.Domain\Repositories\EFCustomerRepository.cs:line 49 InnerException: System.Data.UpdateException
Message=An error occurred while updating the entries. See the inner exception for details.
Source=System.Data.Entity
StackTrace:
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Entity.Internal.InternalContext.SaveChanges()
InnerException: System.Data.SqlClient.SqlException
Message=Cannot insert the value NULL into column 'Editor', table '@T'; column does not allow nulls. INSERT fails. The statement has been terminated.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=42
Number=515
Procedure=CustomersHistoryTrigger
Server=DevPC\SqlExpress
State=2
StackTrace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
InnerException: