我尝试使用预先加载(一些简单的 Include 语句)加载几个相关实体。但是由于某种奇怪的原因,抛出了 ConstraintException。我不确定这是否是 MySql 连接器或其他地方的错误。
我的架构如下所示:
当我尝试使用此语句加载数据时:
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,即使没有分配。由于某种奇怪的原因,负责 Literal 的 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
我无法真正解释那里发生了什么,但我知道这是错误的!有没有人遇到过类似的问题或知道如何解决这个问题?
我目前的设置是:
- MariaDB 5.5.29
- MySQL 连接器 6.6.5
- 实体框架 4
- 按层次结构生成表