如果有,那么Find-Or-Create的C#成语是什么?伪代码:
private IEntity FindOrCreateEntity(int id, object properties) { Entity foundEntity = _db.Find(id); if (foundEntity == null) { foundEntity = _db.Create(properties); } return foundEntity; }
我不喜欢以相同的方法查找和创建存在.
我不喜欢以相同的方法查找和创建存在.
然后不要这样做?
您现在有一个方法可以查找要查找的对象的ID,也可以使用一堆属性来填充新实例.至少可以说这令人困惑.
如果调用者认为ID应该返回现有记录,但它不存在(如果已经存在)怎么办?然后它将继续生存在它正在处理现有记录的假设上,而实际上记录在数据库中还不存在.
让调用者遵循这种模式:
var entity = _repository.Find(id); if (entity == null) { entity = _repository.Create(); }
如果没有,你可以给IEntity
一个实现一个IsNew
属性,返回是否Id == default(TId)
.