3

我想通过 Entity Framework 6 Code First 使用 newid() 设置 SQL 数据库中表的主键的默认值。我知道这是如何通过代码完成的,并且还在 stackoverflow 上找到了一些方法,例如How to set NewId() for GUID in entity framework

但是:我有一个备份/恢复机制,它不是通过对象插入数据,而是作为数据库的一个凸起插入数据。所以这里没有使用实体框架。这意味着将在 SQL 数据库中插入以 null 作为 guid 的行并失败。

可以添加注释

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public Nullable<Guid> Entity_OID { get; set; }

这将成功添加 NEWSEQUENTIALID() 作为默认值,它与 newid() 执行类似的操作(它添加了一个高于最近 guid 的新 guid,因此您赢得了性能,因为您在输入中有订单)。但是因为这是一个已经存在而没有 EF 的数据库,所以我想尽可能少地进行更改。所以我对 NEWSEQUENTIALID() 并不十分满意。如果它仍然只是 newid(),我宁愿喜欢它。但是我在 Entity Framework 6 Code First 中没有找到 newid() 的任何注释/映射。根据设计,对数据库的所有更改都必须通过代码完成。有谁知道如何通过代码将默认值 newid() 添加到行中?

提前致谢!

4

2 回答 2

2

似乎我试图做的事情在 Code First 中是不可能的。并且随着

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Nullable<Guid> Entity_OID { get; set; }

实体框架也会生成一个新的 Guid,即使我在 context.SaveChanges() 之前设置了一个不是我预期的行为。

于 2013-12-23T12:36:22.130 回答
0

当您使用DatabaseGeneratedOption.Identity标记属性时, EF 在每次插入操作后从 DB 获取生成的值并将其设置为属性。在 DB 中,您可以执行所有操作,例如为列创建默认约束 newid()。

于 2015-12-10T17:00:48.020 回答