問題
最近問題が発生しました。ビジネス ロジックを記述するかなり標準的なモデル クラスのセットがあります。流暢な Api を使用して、モデル クラスのデータベース プロパティを記述しています。しかし、実行しAdd-Migration InitialMigration
た後、パッケージ マネージャー コンソールは次の出力で失敗します。
PM> Add-Migration InitialMigration
Scaffolding migration 'InitialMigration'.
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildColumnModel(XElement property, String entitySetName, ModelMetadata modelMetadata)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<>c__DisplayClass125.<BuildCreateTableOperation>b__123(XElement p)
at System.Data.Entity.Migrations.Extensions.IEnumerableExtensions.Each[T](IEnumerable`1 ts, Action`1 action)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildCreateTableOperation(String entitySetName, String tableName, String schema, ModelMetadata modelMetadata)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<FindAddedTables>b__31(XElement es)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, String connectionString)
at System.Data.Entity.Migrations.DbMigrator.Scaffold(String migrationName, String namespace, Boolean ignoreChanges)
at System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(String migrationName, Boolean ignoreChanges)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(MigrationScaffolder scaffolder)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Input string was not in a correct format.
最初は、どの文字列が適切な形式になっていないのか明確ではありませんでした。さまざまなアプローチを検討するのに数日かかりましたが、最終的には何も得られませんでした。防御の最後のポイントとして、必要なスキャフォールディングを行う Visual Studio と Entity Framework のコードをデバッグしたところ、フィールドNVARCHAR(MAX)
のマッピングに問題があることが判明しました。string
どういうわけか、Entity Framework は termMAX
を整数定数として扱っていたFormatException
ため、解析プロセス中に が発生しました。
推測
問題は、プロジェクト構成または Fluent Api と属性 API の混合にあると思います (モデルは、属性を使用してモデルのデータベース プロパティを記述する他のプロジェクトからコピーされ、移行は機能し、すべて問題ありませんでした。その後、属性を削除し、流暢な API を使用してモデルを記述したところ、機能しなくなりました)
おそらく、構成上のポイントを見逃したか、流暢なAPIを誤用したと思います。
質問
Entity Framework がデフォルトの宣言を正しく処理し、整数としてのNVARCHAR(MAX)
解析を停止する方法はありますか...MAX