Ваша догадка верна, EF создает свойства Nullable на основе схемы вашего магазина, и представления не являются исключением из этого. Другими словами, сгенерированный объект сущности должен (и будет) точно отражать вашу схему View, и есть способ, которым вы можете найти проблему:
Прежде всего вам необходимо убедиться, что представление БД было правильно импортировано в вашу модель:
Для этого взломайте вашу EDM в редакторе XML, перейдите к содержимому SSDL и найдите <EntityType Name="yourDbViewName">
, а затем посмотрите на <Property Name="yourFieldName" Type="int" Nullable="false" />
и убедитесь, что каждое поле имеет правильное значение для атрибута Nullable
. Поскольку значение по умолчанию - true, EF поместит этот атрибут только в том случае, если это поле NOT Null .
Начиная с EF4, VS2010 использует шаблон T4 для генерации объектов Entity. Детализация этого T4 показывает, как объекты генерируются с точки зрения Nullablity:
private void WritePrimitiveTypeProperty(EdmProperty primitiveProperty, CodeGenerationTools code)
{
MetadataTools ef = new MetadataTools(this);
#>
/// <summary>
/// <#=SummaryComment(primitiveProperty)#>
/// </summary><#=LongDescriptionCommentElement(primitiveProperty, 1)#>
[EdmScalarPropertyAttribute(EntityKeyProperty=<#=code.CreateLiteral(ef.IsKey(primitiveProperty))#>, IsNullable=<#=code.CreateLiteral(ef.IsNullable(primitiveProperty))#>)]
[DataMemberAttribute()]
<#=code.SpaceAfter(NewModifier(primitiveProperty))#><#=Accessibility.ForProperty(primitiveProperty)#> <#=code.Escape(primitiveProperty.TypeUsage)#> <#=code.Escape(primitiveProperty)#>
Как вы можете видеть, EF использует MetadataTools , чтобы определить, имеют ли свойства Nullable, и MetadataTools в основном содержит вспомогательные методы, которые обращаются к метаданным Entity Framework, необходимым для генерации кода, что означает, что он смотрит на ваш EDM, чтобы получить эту информацию. Конечно, вы можете изменить этот шаблон и настроить его, но для управления типами Nullable на основе вашего представления БД вам это не нужно, поскольку он уже существует.