2012-03-13 2 views
0

Я работаю над приложением, в котором я использую Entity Framewirk 4 и SQL Server 2008, я вызываю свой код из службы WCF Rest. Когда я добавляю новую запись в базу данных с помощью службы и в том же сеансе, запрашивая базу данных против этой записи, она возвращает мне всю информацию, кроме той, которая находится в нулевых вычисляемых столбцах, но если я выполняю тот же запрос в новой сессии, он вернет мне все.Entity Framework не умеет читать изменения для вычисляемых столбцов

Определение для вычисляемого столбца

[ComputedColumn] AS (DateAdd (минута, [OffsetMinutes], [ActualTimeUTC]))

Просьба просветить меня по этому вопросу.

Благодаря

+0

Вы не можете * * сохраняетесь данных в вычисляемый столбец - это ** ** вычисляется, как следует из ее названия, с помощью SQL Server внутренне. –

+0

Но должен быть способ вернуть эти данные или как я могу получить одни и те же данные в другом сеансе. – MegaMind

+0

Значит, «ActualTimeUTC» и «OffsetMinutes» являются столбцами в вашей базе данных? Получается ли заполнение INSERT от EF ?? –

ответ

1

Когда я добавить новую запись в базе данных с помощью сервиса

Если вы сделаете это он уже должен заполнить вычисляемые данные для вас в текущем экземпляре объекта. Вам просто нужно, чтобы пометить столбец вычисленной либо в коде первой:

modelBuilder.Entity<YourEntity>() 
      .Propety(e => e.YourComputedProperty) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
аннотаций

или данных

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 

или в EDMX via StoreGeneratedPattern

в том же сеансе запросов к базе данных против этой записи , он возвращает мне всю информацию, кроме той, которая находится в нулевых подсчитанных столбцах

Он возвращает вам текущее состояние, известное по контексту because of identity map. EF на самом деле не загружает данные из базы данных (даже если он выполняет запрос), если вы не заставляете это делать это. Он по умолчанию использует данные, уже сохраненные в контексте - данные, которые вы вставили.

Чтобы заставить перезагрузки вы можете, например, сделать:

context.Entry(yourEntityToBeReloaded).Reload(); 
+0

Но как я должен предположить, чтобы ввести значение в вычисленный столбец, вы знаете, что «COMPUTED» означает, что сервер sql имеет логику/формулу, чтобы знать, что должно быть введено в этом столбце. Более того, иногда мне нужно вводить поле ID в вычисленном столбце, так что нет другого способа сделать это. – MegaMind

+0

Вы не будете вводить какое-либо значение в вычисленный столбец. Вы дадите EF загрузить его для вас из базы данных после обновления значения вместе с вашими переданными данными. –

+0

Я ожидаю то же самое, но EF не загружает вычисленные значения столбца, и в соответствии с вашим ответом EF возвращает текущее состояние, известное объекту. Перезагрузка - это единственное, что я могу использовать, – MegaMind

Смежные вопросы