天天看点

Entity Framework:如果允许模型处于非法状态,在某些场景下,记得清空DbContext

之前写过两篇文章介绍模型的合法性:

DDD:关于模型的合法性,Entity.IsValid()合理吗?

.NET:关于数据模型、领域模型和视图模型的一些思考

今天讨论的问题其实是关于“主键映射”的,只是其中还涉及一种决策:“允许模型处于非常状态”。

第一个输出之所以不是期望的结果是因为EntityFramework内置了主键映射模式,内存状态还是处于非法状态,虽然First会导致一次数据库往返。

第二个输出之所以正确是因为清空了主键映射,这样会导致重新用数据库的内容填充主键映射。

出现异常最好终止线程或程序的执行,上边这种BUG是因为使用了一种异常反模式:“把异常作为正常的逻辑处理流程”。

这个错误我犯过,后来的朋友也犯过。

·