熱心な読み込み (いくつかの単純な Include ステートメント) を使用して、いくつかの関連するエンティティを読み込もうとしています。しかし、何らかの奇妙な理由で ConstraintException がスローされます。これが MySql Connector のバグなのか、それとも他の場所のバグなのかはわかりません。
私のスキーマは次のようになります。
このステートメントを使用してデータをロードしようとすると:
CurrentConnection.DynFormPresetSet
.Include("Definitions")
.Include("Definitions.FieldDefs")
.Include("Definitions.FieldDefs.Literals")
.FirstOrDefault(p => p.PresetValue == (int)presetDefinition);
私はこの例外を受け取ります:
[ConstraintException: Diese Eigenschaft kann nicht auf einen NULL-Wert festgelegt werden.]
System.Data.EntityUtil.ThrowPropertyIsNotNullable(String propertyName) +89
System.Data.Objects.DataClasses.StructuralObject.SetValidValue(String value, Boolean isNullable) +24
MyApp.Model.DynFormLiteral.set_Label(String value) in d:\Dev\CSharp\Repository\MyApp.Model\MyEntities.cs:2900
lambda_method(Closure , Shaper ) +341
問題はDefinitions.FieldDefs.Literals
関係によって引き起こされます。リテラルの熱心な読み込みを削除すると、機能します。SQL クエリによって生成された ResultSet を確認しましたが、何も割り当てられていない場合でも、Entity Framework が DynFormLiteral を作成しようとしているようです。リテラルを担当する ID 列は、何らかの奇妙な理由で null ではありません。
Definitions.FieldDefs.Validators
ステートメントの代わりにを含めるとLiterals
、ステートメントも機能します。しかし、 と を含めるLiterals
とValidators
、SQL ステートメントは完全に無効になります。
[MySqlException (0x80004005): Unknown column 'Extent1.Id' in 'where clause']
MySql.Data.MySqlClient.MySqlStream.ReadPacket() +383
MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) +116
そこで何が起こっているのか、うまく説明できませんが、それが間違っていることはわかっています。誰かが同様の問題に遭遇したか、この問題を解決する方法を知っていますか?
私の現在の設定は次のとおりです。
- マリアDB 5.5.29
- MySQL コネクタ 6.6.5
- エンティティ フレームワーク 4
- 階層世代ごとのテーブル