我在 MVVM 应用程序中使用实体框架(代码优先)。一些“文件”具有草稿、已确认等状态,当文件被确认时,我想确保没有进行更改,想想发票,一旦确认/签发,用户就不能更改内容。
我读过实体框架中的只读内容,但视图、数据库级别控制或 AsNoTracking 不适合这种情况(我认为)
一些想法?
我在 MVVM 应用程序中使用实体框架(代码优先)。一些“文件”具有草稿、已确认等状态,当文件被确认时,我想确保没有进行更改,想想发票,一旦确认/签发,用户就不能更改内容。
我读过实体框架中的只读内容,但视图、数据库级别控制或 AsNoTracking 不适合这种情况(我认为)
一些想法?
我从来没有这样做过,但你可以接受我在这个答案中看到的想法。
基本上,您可能能够覆盖 DbContext 的 SaveChanges() 方法(或者可能是 DetectChanges()),以查看实体的原始状态是否包含某种将其标记为只读的标志(如 FINAL bool 列,当 true 表示它被锁定了)。当保存或检测发生时,您可以使实体看起来没有被修改并且不会被保存。
这只是一个想法,我不知道这是否真的可能。
在您的实体中实施IValidatableObject
并在确认状态并修改实体状态时引发验证异常。
尽管我会建议在数据库中使用更新触发器(首选方法),但该触发器执行相同操作,以便在使用该数据库的任何应用程序中执行逻辑。