Say I have a table that looks like this:
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)
And I fill this table with a WCF (Soap) service. My data contract looks like this:
[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; }
}
The contract has String for all of these fields.  A string can be a max of about 1,073,741,823 chars.  That is well over the limits that the database will allow.  When a client sends up data they can put in really really long values into my contract.
I would like to find this out before I attempt (and fail) an insert.
I have a very nice in-house made validation framework that will send a Fault down to the client. And I could go and put in a validation for each item. But if I hardcode the lengths of the fields then I see it spiraling out of control very very fast. (If the length of a column has to be changed in two spots, then I am opening up the way for bugs when only one or the other gets changed.)
Is there a way (with entity framework) to get the lengths of a data item? So I can validate it prior to trying to persist it?
Or is there another way to do this validation (except by just failing the insert).
 
     
    