EF6 Code First结合dotConnect for Oracle无法创建索引问题咨询
解决EF6 + dotConnect for Oracle下索引未生成的问题
看起来你遇到的问题是:使用EF6的[Index]数据注解为Preisliste类的Name字段配置唯一索引后,dotConnect for Oracle在创建Oracle表时并没有生成对应的索引。这在你当前使用的9.5.454.0版本的dotConnect中确实可能出现——部分旧版本对EF6的Index注解支持不够完善,尤其是针对Oracle数据库的场景。
下面是几个可行的解决方案:
方案一:改用Fluent API配置索引(推荐)
相比数据注解,Fluent API在dotConnect for Oracle中对索引的支持更稳定。你可以在DbContext的OnModelCreating方法中显式配置这个唯一索引:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 方式一:使用ColumnAnnotation配置 modelBuilder.Entity<Preisliste>() .Property(p => p.Name) .HasMaxLength(16) .IsRequired() .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_Preisliste_Name") { IsUnique = true })); // 方式二:EF6原生简洁写法 modelBuilder.Entity<Preisliste>() .HasIndex(p => p.Name) .IsUnique() .HasName("IX_Preisliste_Name"); }
同时记得移除实体类上的[Index]注解,避免配置冲突:
[Table(nameof(Preisliste) + "n")] public class Preisliste { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int PreislisteId { get; set; } [Required] [MaxLength(16)] // 移除此处的[Index]注解 public string Name { get; set; } }
方案二:检查dotConnect for Oracle的配置项
确认项目的配置文件(web.config/app.config)中,dotConnect的EF Provider配置正确:
<entityFramework> <providers> <provider invariantName="Devart.Data.Oracle" type="Devart.Data.Oracle.Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity, Version=9.5.454.0, Culture=neutral, PublicKeyToken=09af7300eec23701" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="Devart.Data.Oracle" /> <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=9.5.454.0, Culture=neutral, PublicKeyToken=09af7300eec23701" /> </DbProviderFactories> </system.data>
另外要确保你通过Code First迁移(执行Add-Migration和Update-Database命令)或自动创建数据库的方式,触发了索引的生成逻辑。
方案三:升级dotConnect for Oracle版本
你当前使用的9.5.454.0版本相对老旧,Devart在后续版本中优化了对EF6 Index注解的支持。升级到较新的版本可能直接解决这个兼容性问题。
完成上述配置后,重新生成迁移或让EF重建数据库,Name字段的唯一索引应该就能被正确生成了。
内容的提问来源于stack exchange,提问作者Hauke Lü
相关产品推荐
相关产品推荐

