Entity Framework сохранил вычисленные проблемы столбцов - PullRequest
0 голосов
/ 06 июня 2011

Я недавно обновил вычисляемый столбец, чтобы сохранить его из-за низкой производительности при запросе.

Однако теперь обновления дочерних записей выдают эту ошибку

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 операторов обновления в Компании )

Я думаю это решение , но не знаете, как это сделать в EF

1 Ответ

0 голосов
/ 16 марта 2012

Я решил аналогичную проблему, добавив идентификатор связанной сущности в качестве свойства (существенно выставив значение FK в таблице), и при создании записи, если я назначаю только идентификатор связанного объекта для выставленного свойства FK, все работает, связанный объект не нужен .

Вы можете увидеть образец объекта, которому сопоставлен как связанный объект, так и его идентификатор с использованием EF-флюида здесь :

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