EF. Обязательная ошибка проверки для строковых полей без атрибута [Обязательный] - PullRequest
10 голосов
/ 24 октября 2011

Проблема:

При добавлении нового элемента в EntityCollectionView поднялась необходимая проверка для строковых полей, но для моей цели мы должны показать ее после проверки на стороне сервера.

Фактическое поведение:

Вот код из файла метаданных:

[MetadataTypeAttribute(typeof(SomeEntityMetadata))]
public partial class SomeEntity
{
    [EntityName]
    internal sealed class SomeEntityMetadata
    {
        private SomeEntityMetadata()
        {
        }

        public long Id { get; set; }

        [EntityName(Name = "Name", OrderIndex = 2)]
        public string Name { get; set; }

        [EntityName(Name = "Data Type", OrderIndex = 1)]
        public string Type { get; set; }

    }
}

И коллекция этих элементов, связанных с DataGrid в xaml:

<navigation:DataGridTemplateColumn CanUserReorder="True"
                                   CanUserSort="True"
                                   Header="Name"
                                   SortMemberPath="Name">
    <navigation:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock VerticalAlignment="Center" Text="{Binding Name}"/>
        </DataTemplate>
    </navigation:DataGridTemplateColumn.CellTemplate>
    <navigation:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Name, Mode=TwoWay}" Height="Auto"/>
        </DataTemplate>
    </navigation:DataGridTemplateColumn.CellEditingTemplate>
</navigation:DataGridTemplateColumn>
<navigation:DataGridTemplateColumn CanUserFilter="True"
                                         CanUserSort="True"
                                         Header="Type"
                                         SortMemberPath="Type">
    <navigation:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock VerticalAlignment="Center" Text="{Binding Type}" />
        </DataTemplate>
    </navigation:DataGridTemplateColumn.CellTemplate>
    <navigation:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding DataTypes, Source={StaticResource entityViewModel}}" SelectedItem="{Binding Type, Mode=TwoWay}/>
        </DataTemplate>
    </navigation:DataGridTemplateColumn.CellEditingTemplate>
</navigation:DataGridTemplateColumn>

Как видите, для полей нет атрибутов [Required], но при вставке нового элемента с полями Name и Type, установленными в String.Empty ошибки "Поле имениобязательно для заполнения " и " Поле типа обязательно для заполнения " появляется.

Необходимое поведение: Пропустить обязательную проверку и выбросить ValidationException с сервера, когда поля Name или Type пусты.

ПРИМЕЧАНИЕ: Silverlight, EF, WCF RIA, MVVM.

1 Ответ

28 голосов
/ 31 октября 2011

Для этого вы можете установить

 [Required(AllowEmptyStrings=true)]

На свойствах, которые вы хотите пройти.

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