我正在开发一个使用POCO实体数据模型的RIA域服务。由于POCO类没有实现EntityState
属性,因此默认域服务模板需要一些修复,EntityObject
也是如此。
Julie Lerman提供了解决方案:
OLD: if ((customer.EntityState == EntityState.Detached))
NEW: if ((GetEntityState(customer) != EntityState.Detached))
问题是我可能不得不在开发过程中多次重新生成域服务,并且有很多表/实体需要处理。
问题:
上面的“OLD”可以使用正则表达式替换为“NEW”吗?这是一个非常可预测的模式:
- 查找
的实例'.EntityState'
- 替换为“
醇>GetEntityState([text between ( and .])
”
答案 0 :(得分:3)
使用 Visual Studio 查找和替换(以及使用正则表达式 >当然):
找到什么:
if \(\({:i}\.EntityState == EntityState\.Detached\)\)
替换为:
if ((GetEntityState(\1) == EntityState.Detached))
修改强>
OP似乎更喜欢 Expresso 。在这种情况下,它会是这样的:
正则表达式:
if \(\((\w+)\.EntityState == EntityState\.Detached\)\)
替换字符串:
if ((GetEntityState($1) == EntityState.Detached))
(同样修正了!=
错字)
答案 1 :(得分:2)
s/(\w+)\.(EntityState)/Get\2(\1)/
编辑:您没有要求将==
翻转到!=
,但我不确定它应该是相反的功能
编辑2 :另外,如果您想在一行中多次执行此操作,请在末尾添加g
答案 2 :(得分:0)
如果您有ReSharper,则可以使用其结构化搜索和替换功能。然后你将捕获除if
语句之外的其他位置 - 它将足够聪明地找到引用EntityState
属性的任何表达式,并将其转换为方法调用。如果你愿意,你甚至可以将它限制在某些类中,尽管听起来在这种情况下可能没有必要。
$obj$.EntityState
obj
作为名称。将“表达式类型”留空,或者如果要缩小搜索范围,请输入您的POCO类型名称。单击“确定”。GetEntityState($obj$)