由于查询时性能不佳,我最近更新了一个要持久化的计算列。
然而,现在更新到子记录会抛出此错误
System.Data.SqlClient.SqlException
Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services.
具有内部异常
An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types.
无论列上是否有索引,都会发生这种情况。
仅供参考,我有一个列的配置,因此:
Property(c => c.DisplayName).HasColumnName("DISPLAY_NM").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
有什么变通办法吗?
编辑
子元素语句是非常不相关的,但它在这里。想象一下实体Order,Company(Order必须有一个Company)。我用一个未更改的公司及其导致问题的计算列的公司实体创建了一个订单-它在没有计算列持久性的情况下运行良好(正如预期的那样,订单上有1个插入语句,公司上有0个更新语句)
我认为这是解决方案,但不确定如何在EF 中做到这一点
我通过添加相关实体的ID作为属性(表中基本公开的FK值)解决了类似的问题,并且在创建记录时,如果我只将相关对象的ID分配给公开的FK-属性,则一切正常,不需要相关对象。
您可以在这里看到实体的样本,该样本具有使用EF流体映射映射的相关对象及其ID:
public ThingMap()
{
this.Property(t => t.Name)
.IsRequired()
.IsMaxLength()
.IsUnicode();
//// Table mappings
this.ToTable("Things", "go");
this.Property(t => t.Name).HasColumnName("Name");
this.Property(t => t.TypeId).HasColumnName("Type_Id");
//// References
this.HasRequired(t => t.Type)
.WithMany(t => t.Things)
.HasForeignKey(t => t.TypeId);
}