По нескольким причинам, которые я не имею смелость говорить о том, мы определяем вид на нашем сервере базы данных Sql 2005 следующим образом:Entity Framework и SQL Server Просмотр
CREATE VIEW [dbo].[MeterProvingStatisticsPoint]
AS
SELECT
CAST(0 AS BIGINT) AS 'RowNumber',
CAST(0 AS BIGINT) AS 'ProverTicketId',
CAST(0 AS INT) AS 'ReportNumber',
GETDATE() AS 'CompletedDateTime',
CAST(1.1 AS float) AS 'MeterFactor',
CAST(1.1 AS float) AS 'Density',
CAST(1.1 AS float) AS 'FlowRate',
CAST(1.1 AS float) AS 'Average',
CAST(1.1 AS float) AS 'StandardDeviation',
CAST(1.1 AS float) AS 'MeanPlus2XStandardDeviation',
CAST(1.1 AS float) AS 'MeanMinus2XStandardDeviation'
WHERE 0 = 1
Идея заключается в том, что Entity Framework создаст объект на основе этого запроса, который он делает, но он создает его с ошибкой, которая гласит следующее:
Предупреждение 6002: таблица/зрения «Keystone_Local.dbo.MeterProvingStatisticsPoint» не имеет первичный ключ. Ключ был выведен, и определение было создано как таблица/представление только для чтения.
И он решает, что поле CompletedDateTime будет этим первичным ключом этого объекта.
Мы используем EdmGen для создания модели. Есть ли способ, чтобы инфраструктура сущности не включала любое поле этого представления в качестве первичного ключа?
Я думаю, что это лучшее, на что можно надеяться. В нижней части это работает. – MvcCmsJon
Я пробовал это, и он не работает. Разрабатывает ли дизайнер EF определение представления или просто выводит столбцы из результатов данных? – sabanito
Спасибо! Он отлично работал. @sabanito Я думаю, что это анализирует определение. поэтому вам нужно специально обернуть ключевые свойства в IsNull(). У меня есть представление, которое не возвращает никаких нулей (и не может возвращать нулевые значения), но из-за того, как была написана логика, EF не мог определить, что это было так, пока я не завернул ключи в IsNull(). – Rabbi