Получить длину данных с помощью Entity Framework (для проверки длины данных в службе WCF) - PullRequest
6 голосов
/ 08 сентября 2011

Скажем, у меня есть таблица, которая выглядит следующим образом:

create table #Employee (
    EmployeeId int identity(1,1) not null,
    FirstName varchar(100) not null,
    LastName varchar(100) not null,
    Suffix varchar(10) not null,
    Prefix  varchar(10) not null,
    Address varchar(500) null)

И я заполняю эту таблицу сервисом WCF (Soap). Мой контракт на данные выглядит так:

[DataContract]
public class Employee
{
    [DataMember]
    public virtual string FirstName { get; set; }
    [DataMember]
    public virtual string LastName { get; set; }
    [DataMember]
    public virtual string Suffix { get; set; }
    [DataMember]
    public virtual string Prefix { get; set; }
    [DataMember]
    public virtual string Address { get; set; }
}

В контракте есть String для всех этих полей. Максимальная длина строки может составлять около 1 073 741 823 символа . Это значительно превышает пределы, которые допускает база данных. Когда клиент отправляет данные, он может ввести в мой контракт действительно очень длинные значения.

Я хотел бы выяснить это, прежде чем попытаться (и не удастся) вставить.

У меня есть очень хорошая встроенная среда проверки, которая отправит сбой клиенту. И я мог бы пойти и поставить проверку для каждого элемента. Но если я жестко закодирую длины полей, я вижу, что они очень быстро выходят из-под контроля. (Если длина столбца должна быть изменена в двух местах, я открываю путь для ошибок, когда изменяется только одно или другое.)

Есть ли способ (с помощью сущности), чтобы получить длину элемента данных? Так я могу проверить это до того, как попытаться сохранить?

Или есть другой способ выполнить эту проверку (кроме простого сбоя вставки).

1 Ответ

0 голосов
/ 08 сентября 2011

Вы можете использовать MetadataWorkspace и обрабатывать событие SavingChanges в ObjectContext.

Максимальная длина поля в платформе Entity

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