使用实体框架获取数据长度(以验证WCF服务上的数据长度)

本文关键字:数据 服务 WCF 验证 实体 获取 框架 | 更新日期: 2023-09-27 18:07:55

假设我有一个表,看起来像这样:

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个字符。这远远超过了数据库所允许的限制。当客户发送数据时,他们可以在我的合同中输入非常非常长的值。

我想在我尝试(和失败)插入之前找出这个问题。

我有一个非常好的内部验证框架,将发送一个故障到客户端。我可以为每一项输入一个验证。但是如果我硬编码字段的长度,我看到它很快就会失去控制。(如果必须在两个位置更改列的长度,那么当只更改其中一个时,我就为bug开辟了道路。)

是否有一种方法(与实体框架)来获得数据项的长度?所以我可以在尝试持久化它之前验证它?

或者是否有其他方法来执行此验证(除了插入失败)

使用实体框架获取数据长度(以验证WCF服务上的数据长度)

你可以使用MetadataWorkspace来处理ObjectContext上的SavingChanges事件。

实体框架中字段最大长度