1

我的钥匙专栏

   this.Property(t => t.Guid).HasColumnName("Guid")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

和插入。

         context.TrafficImages.Add(new TrafficImage { Guid = guids[i] });
                context.SaveChanges();

当我保存时,数据库会编写自己的 guid。无论如何,如果我定义它,让我编写自己的 guid,如果没有,db 会创建一个?

4

1 回答 1

0

如果您指定 DatabaseGenerationOption.Identity EF 会将您的属性视为由标识列支持的属性。在这种情况下,即使您设置了属性,当添加新实体时,该值也将被忽略,并且将使用您的 Db 生成的值。您可以删除 HasDatabaseGeneratedOption 配置,但如果您的数据库生成键,如果 EF 尝试向该列插入值,则会出现异常。如果您的数据库不生成键,那么您根本不应该有 HadDatabaseGenerationOption 配置,并且您应该在添加新实体时始终在客户端上设置键值,因为数据库不会为您创建一个。当数据库为您创建一个密钥(如果它不存在)时,我认为不存在混合模式。您可能必须为此创建一个存储过程并将其映射到 Create 操作。不幸的是 CodeFirst 不支持将存储过程映射到 CUD 操作。

于 2012-10-18T02:08:03.997 回答