之前写过两篇文章介绍模型的合法性:
DDD:关于模型的合法性,Entity.IsValid()合理吗?
.NET:关于数据模型、领域模型和视图模型的一些思考
今天讨论的问题其实是关于“主键映射”的,只是其中还涉及一种决策:“允许模型处于非常状态”。
第一个输出之所以不是期望的结果是因为EntityFramework内置了主键映射模式,内存状态还是处于非法状态,虽然First会导致一次数据库往返。
第二个输出之所以正确是因为清空了主键映射,这样会导致重新用数据库的内容填充主键映射。
出现异常最好终止线程或程序的执行,上边这种BUG是因为使用了一种异常反模式:“把异常作为正常的逻辑处理流程”。
这个错误我犯过,后来的朋友也犯过。
·