实体框架持续计算列失败

时间:2011-06-06 10:58:28

标签: entity-framework-4.1 ef-code-first calculated-columns

我最近更新了一个计算列,由于查询时性能不佳而要保留。

但是现在对子记录的更新会抛出此错误

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);

任何解决方法?

修改

子元素语句非常无关紧要 - 但现在就是这样。想象实体订单,公司(订单必须有公司)。我创建了一个订单,其中包含未更改的公司及其公司实体,其中包含导致问题的计算列 - 它在没有计算列的持久性的情况下正常工作(正如预期的那样,订单上有1个插入语句,公司上有0个更新语句)

我认为this is the solution但不确定如何在EF

中执行此操作

1 个答案:

答案 0 :(得分:0)

我通过添加相关实体的ID作为属性解决了类似的问题(essentialy暴露了表中的FK值),并且在创建记录时,如果我只将相关对象的id分配给暴露的FK属性,一切正常,不需要相关对象

您可以使用EF流体映射here查看包含相关对象及其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);
        }