c# - Entity Framework 故意禁用自动增量

标签 c# entity-framework

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

我的类(class)是这样的

  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

关于c# - Entity Framework 故意禁用自动增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37939619/

相关文章:

c# - 用希伯来字母反序列化json

c# - 将项目添加到 List<> 排序吗?

entity-framework - 可怕的 "parameter was not bound in the specified LINQ to Entities query expression"异常

c# - 在 Entity Framework Core 中使用动态过滤器

c# - 在 Xamarin Forms 中显示模态对话框时,如何显示和设置 'BackButtonText' ?

c# - Foreach 仅适用于 ListBox 的第一项

c# - 从模型中删除数据注释并将它们放在单独的类中

c# - 创建 Linq 查询时出错

c# - 基于当前 URL 创建规范 URL 有什么好处?

c# - 从 Entity Framework 中自动生成的类继承