我可以覆盖实体框架中插入的标识,而无需将数据库写入

时间:2012-10-18 00:26:46

标签: c# entity-framework

我的专栏

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

插入。

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

当我保存时,db会编写自己的guid。无论如何,如果我定义它,让我编写自己的guid,如果不是,db会创建一个吗?

1 个答案:

答案 0 :(得分:0)

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