我想通过实体框架6代码优先使用newid()在SQL数据库中设置表的主键的默认值。 我知道这是如何通过代码完成,也发现了一些方法上的计算器,像How to set NewId() for GUID in entity frameworknewid()与实体框架6代码优先
但是:我有一个备份/恢复机制,插入不是通过对象,但只是作为一个隆起到数据库中的数据。所以这里没有使用实体框架。这意味着一个以guid为null的行将被插入到SQL数据库中并失败。
它可以添加注释
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Nullable<Guid> Entity_OID { get; set; }
,这将成功添加NEWSEQUENTIALID()作为默认值,它做了类似的事情,如NEWID()(它增加了一个新的GUID比越高最近的指导,所以你赢得perfomance,因为你有一个订单在输入)。 但是,因为这是一个已经存在没有EF的数据库,我希望尽可能地做少量更改。所以我对NEWSEQUENTIALID()并不满意。如果它仍然是newid(),我宁愿喜欢它。但是我还没有在Entity Framework 6 Code First中找到newid()的任何Annotation/Mapping。通过设计,所有对数据库的更改都必须通过代码完成。 有谁知道如何通过代码将默认值newid()添加到行?
在此先感谢!
难道你不能使用自动生成的密钥,并设置ctor中的键值?我认为GUID保证是唯一的,所以它应该无关紧要,如果它们是由数据库或代码生成的,并且您不应该陷入两个实体生成相同GUID的情况(再次 - 因为GUID应该是globaly独特) – Pawel
是的,我可以做到这一点,并适用于通过Buisness Logic在我的代码中创建的实体。但是,如果我通过没有创建实体的流从cbak文件恢复,那么数据库必须生成它们。 –