Как мне сказать, что Entity Framework Function Import импортирует, что столбец, возвращаемый хранимой процедурой, не обнуляется? - PullRequest
16 голосов
/ 19 января 2012

У меня есть хранимая процедура SQL Server, которая выглядит следующим образом:

CREATE PROCEDURE [jp].[GetFoo]
    @Guid UNIQUEIDENTIFIER
AS

SELECT
    CONVERT(BIT, (CASE WHEN [dbo].[GetBar](T.Col2) = 3 THEN 1 ELSE 0 END)) IsGetBarCol2EqualToThree
FROM 
    [dbo].[MyTable] T
WHERE
    T.Col1 = @Guid

Когда я выполняю функцию импорта / получения информации о столбце в EF, предполагаемый тип столбца IsGetBarCol2EqualToThree равен Nullable<bool>.Но это поле ни в коем случае не будет нулевым, поэтому я бы хотел, чтобы оно было просто bool.Есть ли способ сделать это, что будет постоянным при обновлении (то есть, который не зависит от изменения какого-либо сгенерированного кода)?

Версия SQL Server 2005, я использую Visual Studio 2010SP1 с EF 4,проект скомпилирован против .net 4.0.

Ответы [ 3 ]

11 голосов
/ 19 января 2012

Сделать эту модификацию: isnull([dbo].[GetBar](T.Col2), 0)

2 голосов
/ 03 октября 2013

Вы можете создать сложный тип и затем изменить свойство Nullable сгенерированного поля.Может быть полезно, если вы не хотите менять свой sp.

шаг за шагом:

  • открыть свой edmx
  • открыть модель браузера (View-> OtherWindows-> Entity Data Model Browser)
  • перейти к полю в созданном вами сложном типе (* .emdx-> Model-> Complex Types-> your type-> field)
  • открыть свойстваОкно (нажмите F4)
  • среди свойств должен быть Nullable.Вы можете изменить его здесь, и он не будет перезаписан при следующем обновлении модели, но если вы воссоздаете сложный тип, вы потеряете настройку.

В качестве альтернативы вы можете открыть edmx как xml и найти то же самоесвойство.

<ComplexType Name="...">
          <Property Type="Int32" Name="..." Nullable="true" />

пс: я проверял это в VS2012, EF 5

0 голосов
/ 28 сентября 2017

У вас есть способы решить эту проблему.

1 - измените процедуру на isnull ("ваше выражение", 0), затем обновите вашу модель из базы данных и обновите.

2- выМожно открыть модель класса и изменить ее вручную, но при любом обновлении модели вы потеряете изменение.

Так что, на мой взгляд, первое решение является лучшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...