我正在编写将在第一步替换旧应用程序的应用程序,不幸的是,我必须同步数据
我的类(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/