我的要求是采用一种通用的方法来确保数据库中不存储前导/尾随空格。我们的架构是WCF->业务逻辑管理器->通用存储库->实体框架5.0->DB
现在我有两种方法来做
- 在Generic Repository中执行(但在这里,我必须在整个对象图中搜索字符串属性并更改值)
- 在WCF管道中进行反序列化时执行此操作(但在这里,我可能必须放置我的自定义序列化程序,我不想这样做,因为我只想在序列化期间创建一个事件,在该事件中我可以查询属性类型并更改其值)
我赞成方法2,但正在寻找最简单的方法来做到这一点,而不需要更改整个序列化程序。有没有一种方法可以在不使用自定义序列化程序的情况下更改它。我们目前正在使用XmlSerializer。
寻找以下输入(2)
- 哪种方法的性能更好
- 如何在WCF管道中的现有序列化过程中附加我的小方法
谢谢,Avi
您的代码应该在数据层而不是序列化层上工作,因为这是需求的来源。
至于实现,您有两种选择。
您可以使用DbChangeTracker
或IDbCommandInterceptor
(在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();
}
}