实体框架故意禁用自动增量

Vol*_*hat 3 c# entity-framework

我正在编写将替换旧应用程序的应用程序等第一步,不幸的是,我必须同步数据

我的班级看起来像那样

  public class Program
    {
        [Key]
        public int ProgramIndex { get; set; }

        public string ProgramName { get; set; }
        public string EnglishName { get; set; }
        public string ExtraData { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我正在为这个项目使用 sqlite,它允许指定 ProgramIndex 或者它会为我生成。

但是,如果我尝试使用 entityframework 插入并指定索引,它将失败。我可以通过向索引属性添加属性来解决这个问题

[DatabaseGenerated(DatabaseGeneratedOption.None)]
Run Code Online (Sandbox Code Playgroud)

但问题是我只需要在同步数据时禁用自动增量。

所以我的问题是有没有办法即时设置 DatabaseGeneratedOption.None ?

Vol*_*hat 5

我做的最简单的方法是从我的数据库上下文扩展

 public class NoTrackingFlymarkOfflineContext : FlymarkOfflineContext
    {
        public NoTrackingFlymarkOfflineContext() : base("FlymarkOfflineContext")
        {
            Configuration.AutoDetectChangesEnabled = false;
            Configuration.ValidateOnSaveEnabled = false;
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Viddil>()
                .Property(p => p.ViddilIndex)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        }
    }
Run Code Online (Sandbox Code Playgroud)

想法如下,为了同步,我使用不同的上下文,以加快速度,实际上在这里覆盖模型创建是我能做的最好的事情,所以我使用的是 NoTrackingFlymarkOfflineContext 我负责索引和 EntityState