WCF服务中反序列化的修剪空间



我的要求是采用一种通用的方法来确保数据库中不存储前导/尾随空格。我们的架构是WCF->业务逻辑管理器->通用存储库->实体框架5.0->DB

现在我有两种方法来做

  1. 在Generic Repository中执行(但在这里,我必须在整个对象图中搜索字符串属性并更改值)
  2. 在WCF管道中进行反序列化时执行此操作(但在这里,我可能必须放置我的自定义序列化程序,我不想这样做,因为我只想在序列化期间创建一个事件,在该事件中我可以查询属性类型并更改其值)

我赞成方法2,但正在寻找最简单的方法来做到这一点,而不需要更改整个序列化程序。有没有一种方法可以在不使用自定义序列化程序的情况下更改它。我们目前正在使用XmlSerializer。

寻找以下输入(2)

  1. 哪种方法的性能更好
  2. 如何在WCF管道中的现有序列化过程中附加我的小方法

谢谢,Avi

您的代码应该在数据层而不是序列化层上工作,因为这是需求的来源。

至于实现,您有两种选择。

您可以使用DbChangeTrackerIDbCommandInterceptor(在EF6中是新的)来更改EF上下文的行为。

以下是如何使用更改跟踪器轻松做到这一点

public class FooContext : DbContext
{
    public override int SaveChanges()
    {
        var items = ChangeTracker.Entries().Where(e => e.State == EntityState.Added).ToList();
        foreach(var item in items)
        foreach(var property in item.PropertyNames)
        {
            var propValue = item[property] as string;
            if(propValue != null)
            {
                item[property] = propValue.Trim();
            }
        }
        return base.SaveChanges();
    }
}

最新更新