查找或创建数据库项的模式是什么?

时间:2017-01-25 15:41:58

标签: c#

如果有,那么Find-Or-Create的C#成语是什么?伪代码:

private IEntity FindOrCreateEntity(int id, object properties)
{
    Entity foundEntity = _db.Find(id);
    if (foundEntity == null)
    {
        foundEntity = _db.Create<Entity>(properties);
    }
    return foundEntity;
}

我不喜欢以同样的方法找到并创造存在。

1 个答案:

答案 0 :(得分:5)

  

我不喜欢以同样的方法找到并创造存在。

然后不要这样做?

您现在有一个方法可以查找要查找的对象的ID,也可以使用一堆属性来填充新实例。至少可以说这令人困惑。

如果来电者认为该ID应该返回现有记录,但它不再存在怎么办?然后,它会根据它在现有记录上工作的假设而继续生存,而实际上该记录在数据库中还不存在。

让呼叫者遵守这种模式:

var entity = _repository.Find(id);
if (entity == null)
{
    entity = _repository.Create();
}

如果有任何问题,您可以为IEntity的实施提供一个IsNew属性,该属性返回Id == default(TId)