【发布时间】:2016-09-22 15:25:48
【问题描述】:
我有一个案例,我需要添加一个非主键的 Guid 属性,并且可以与表中的多个对象共享。
我想做的是:
- 当我不给它一个值时在数据库上生成 Guid
- 当我有值时设置一个 Guid(而不是生成它)
这两项都将仅在插入时完成,更新不会触及这些值。
我尝试过的:
- 添加 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 属性:仅在我不需要手动设置 Guid 时有效
- 添加 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 属性:当我不手动设置 Guid 时不起作用
我已经看过很多关于这个主题的文章,最接近的应该是这篇文章: http://www.davepaquette.com/archive/2012/09/23/calculated-columns-in-entity-framework-code-first-migrations.aspx
但我们不会(也不会)在我们的项目中使用迁移,所以这似乎不合适。
或者这个 SO question,但这意味着在 .Net 中生成 Guid(至少在我看来,这似乎不是很干净):EF, Code First - How to set a custom Guid identity value on insert
有没有办法生成 Guid 数据库端,并在需要时先在 EF 代码中设置它?
如果没有,有什么好的选择?在 .Net 端生成 Guid 真的是个坏主意吗? (如果没有其他可能,我可以这样做)
【问题讨论】:
-
您可以编辑您的迁移并设置默认值 newid(),并将其标记为 databsegeneratedoption.identity
-
@HadiHassan 实际上我们不会(也不会)在这个项目中使用迁移...你知道另一种设置“newid()”的方法吗?
-
我认为您只能通过设置 guid 的插入触发器来执行此操作,以防提供空值。
标签: c# ef-code-first entity-framework-6 guid