Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Entityframework故意禁用自动增量_C#_Entity Framework - Fatal编程技术网

C# Entityframework故意禁用自动增量

C# Entityframework故意禁用自动增量,c#,entity-framework,C#,Entity Framework,我写的应用程序将取代旧的应用程序,所以在第一步,不幸的是,我必须同步数据 我的班级看起来像那样 public class Program { [Key] public int ProgramIndex { get; set; } public string ProgramName { get; set; } public string EnglishName { get; set; } public s

我写的应用程序将取代旧的应用程序,所以在第一步,不幸的是,我必须同步数据

我的班级看起来像那样

  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)]
但问题是,我只需要在同步数据时禁用自动增量


因此,我的问题是,有没有办法设置DatabaseGenerateOption.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);
        }
    }
公共类NotTrackingFlymarkOfflineContext:FlymarkOfflineContext
{
public NoTrackingFlymarkOfflineContext():基(“FlymarkOfflineContext”)
{
Configuration.AutoDetectChangesEnabled=false;
Configuration.ValidateOnSaveEnabled=false;
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.Property(p=>p.index)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
}

想法如下,对于同步,我使用不同的上下文来加速,实际上在这里重写modelcreation是我能做的最好的事情,因为我使用的是NoTrackingFlymarkOfflineContext,所以我负责索引和EntityState

实际上,您可以将
ProgramIndex
从type
int
设置为
string
。这将删除自动增量。@ShawnYan问题是我需要它是一个自动增量,只有在某些情况下我才需要关闭它…为该任务创建一个专用的上下文类+类模型。@GertArnold是的,但它将是完整副本,所以我不喜欢这样idea@GertArnold但我也认为继承了一些类,比如programWithIdentity,programWithIdentity