我正在编写将替换旧应用程序的应用程序,因此在第一步中,很遗憾,我必须同步数据

我班上的样子

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

        public string ProgramName { get; set; }
        public string EnglishName { get; set; }
        public string ExtraData { get; set; }
    }


我在这个项目中使用sqlite,它允许指定ProgramIndex,否则它将为我生成。

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

[DatabaseGenerated(DatabaseGeneratedOption.None)]


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

所以我的问题是,这有什么办法可以动态设置DatabaseGeneratedOption.None吗?

最佳答案

对我而言,最简单的方法是从数据库上下文扩展

 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);
        }
    }


接下来的想法是,对于同步,我正在使用不同的上下文来加快速度,实际上,在这里重写模型创建是我所能做的最好的事情,因此,正因为如此,我正在使用NoTrackingFlymarkOfflineContext我负责索引和EntityState

10-07 12:36