我尝试使用预先加载(一些简单的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
关系引起的。如果我删除Literals上的热切加载它就可以了。我检查了SQL Query生成的ResultSet,看起来实体框架尝试创建一个DynFormLiteral,即使没有分配。由于某些奇怪的原因,负责文字的ID列不为空。
如果我包含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
我无法解释那里发生了什么,但我知道这是错的!有没有人遇到类似的问题或者想知道如何解决这个问题?
我目前的设置是: