【发布时间】:2017-07-17 06:02:33
【问题描述】:
在我尝试以更实用的方式进行编程的过程中,我提出了以下静态函数:
public static class BaseService
{
public static T EntityGet<T>(Guid id, XrmServiceContext xrmServiceContext) where T : Entity
{
return xrmServiceContext.CreateQuery<T>().Single(query => query.Id == id);
}
}
我们如何确保它是确定性的并且总是为指定的输入返回相同的值?
请注意,XrmServiceContext 是一个存储库,可能会根据连接是打开还是关闭而抛出。
我们是否应该将返回类型包装到 Maybe 中? :
public static Maybe<T> EntityGet<T>(Guid id, XrmServiceContext xrmServiceContext) where T : Entity
{
return xrmServiceContext.CreateQuery<T>().Single(query => query.Id == id).ToMaybe();
}
这样我们可以100%确定返回值。
问题: 在 Maybe 更改之后,我们现在是否可以拥有完全确定的行为,无论存储库是启动还是关闭?
【问题讨论】:
-
如果数据库关闭,Single 会抛出异常,因此执行不会到达 ToMaybe。另外,我不确定任何调用数据库(外部存储)的函数在严格意义上如何是纯粹的。
-
我不知道。我们可以得出结论,你不能有一个纯函数来进行数据库调用吗?
标签: c# .net visual-studio functional-programming dynamics-crm-2011