我正在编写将替换旧应用程序的应用程序,因此在第一步中,很遗憾,我必须同步数据
我班上的样子
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