我有一个 Database First EDMX,其中一个实体有一个属性,必须将其设置为 StoreGeneratedPattern = Identity 才能使用顺序 GUID 作为主键。

这可以正常工作,但是每当使用“从数据库更新模型”刷新模型时,该值都会重置为 StoreGeneratedPattern = None ,并且必须手动编辑。

这是一个麻烦和潜在人为错误的重要来源,特别是如果必须更改多个表并且多个开发人员可能对数据库进行更改并根据需要更新 EDMX。

我发现没有简单的方法可以保留 StoreGeneratedPattern 值,但是有没有简单的方法?甚至是在 EDMX 更新和编辑 EDMX 时运行的自动脚本?任何不需要知道所有需要编辑的东西的解决方案?

谢谢

最佳答案

这是因为在 SQL Server 中不能隐式地将 GUID 列设置为自动递增标识。我知道您可以设置一个 hack,例如将这个“所谓的”身份列的默认值设置为 newsequentialid() 以自动使用 GUID 填充此列,但从技术上讲,该列本身并不是该表的身份列。显然,当 EF 在“从数据库更新模型”期间生成 EDMX 时,它将此列视为常规列而不是自动递增标识,因此,会将您手动编辑的 StoreGeneratedPattern = Identity 覆盖回 StoreGeneratedPattern = None。

这是一个 hack,我强烈建议不要对 EF 自动生成的代码进行任何更改。我已经看到许多开发人员在立即采取补救措施时被烧毁,但当它回来并在以后咬他们时,他们希望他们永远不会操纵自动生成的代码。

只是一个警告!

10-08 09:04