Как вывести Т? не допускает значение Nullable‹T› в коде обратного проектирования EF?

Функция «Сначала реконструировать код» в Entity Framework Power Tools, Beta 2 очень хорош, и я работаю над настройкой шаблонов обратного проектирования.

В Entity.tt взгляните на следующую строку (введены разрывы строк):

<#= Accessibility.ForProperty(property) #> 
<#= code.Escape(property.TypeUsage) #> 
<#= code.Escape(property) #> 
{ get; set; }

Для столбца базы данных с именем «SomeDate» типа datetime вы получите следующий код:

public Nullable<System.DateTime> SomeDate { get; set; }

Как я могу изменить код Entity.tt, чтобы вместо этого создать это:

public DateTime? SomeDate { get; set; }

Спасибо,

R.


person Richard    schedule 30.08.2012    source источник
comment
Зачем тебе это, они же...   -  person Not loved    schedule 30.08.2012
comment
ReSharper и StyleCop. Кроме того, я никогда не писал Nullable‹System.DateTime› и предпочел бы, чтобы мои инструменты тоже этого не делали.   -  person Richard    schedule 30.08.2012


Ответы (2)


Как уже упоминалось podiluska, вам нужно отредактировать EF.Utility.CS.ttinclude (вы можете видеть, что это импортируется Entity.tt, если вы следуете «Настроить шаблоны обратного проектирования» инструкции здесь)

На моей машине это здесь:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes

Около строки 127 заменить

return String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName);

С участием

return String.Format(CultureInfo.InvariantCulture, "{0}?", typeName);

Проверьте это. У меня он работал нормально, но я не могу гарантировать, что он будет работать для всех типов, допускающих значение NULL. Будем признательны за любые комментарии, и я отредактирую этот пост соответствующим образом

person Daniel Dyson    schedule 25.09.2012
comment
Вроде неплохо, но сейчас я работаю над другим проектом, так что кто знает, когда я смогу это правильно подчеркнуть. Но я приму. - person Richard; 09.10.2012
comment
Я вообще не могу изменить его, он не позволит мне редактировать его, если я попытаюсь сохранить. - person PositiveGuy; 11.12.2012
comment
Какое сообщение? У вас есть права на редактирование каталога и файла? Попробуйте создать новый файл в той же папке. - person Daniel Dyson; 11.12.2012

code — это CodeGenerationTools, содержащийся в EF.Utility.CS.ttinclude

Если вы хотите изменить поведение Escape, вы можете отредактировать его там.

person podiluska    schedule 30.08.2012