using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Z.EntityFramework.Plus;
public static void Main()
using (var context = new EntityContext())
context.Database.EnsureCreated();
var guidID = new Guid("00000000-0000-0000-0000-000000000013");
using (var context = new EntityContext())
context.Database.OpenConnection();
context.GeneratedValueWithDataAnnotations.SqlServerSetIdentityInsertOn();
var entity = new GeneratedValueWithDataAnnotation() {
TestName = "INSERT with values",
Computed = "INSERT (Ignore)",
Concurrency = "INSERT (Save)",
DefaultValue = "INSERT (Save)",
RowVersion = "INSERT (Ignore)",
ValueGeneratedNever = "INSERT (Save)",
ValueGeneratedOnAdd = "INSERT (Save)",
ValueGeneratedOnAddOrUpdate = "INSERT (Ignore)",
ValueGeneratedOnUpdate = "INSERT (Save)",
ValueGeneratedOnUpdateSometimes = "INSERT (Save)"
context.GeneratedValueWithDataAnnotations.Add(entity);
FiddleHelper.WriteTable("1 - INSERT with values", context.GeneratedValueWithDataAnnotations.AsNoTracking().ToList());
using (var context = new EntityContext())
var entity = context.GeneratedValueWithDataAnnotations.First();
entity.TestName = "UPDATE with values";
entity.Computed = "UPDATE (Ignore)";
entity.Concurrency = "UPDATE (Save)";
entity.DefaultValue = "UPDATE (Save)";
entity.RowVersion = "UPDATE (Ignore)";
entity.ValueGeneratedNever = "UPDATE (Save)";
entity.ValueGeneratedOnAdd = "UPDATE (Save)";
entity.ValueGeneratedOnAddOrUpdate = "UPDATE (Ignore)";
entity.ValueGeneratedOnUpdate = "UPDATE (Ignore)";
entity.ValueGeneratedOnUpdateSometimes = "UPDATE (Save)";
FiddleHelper.WriteTable("2 - UPDATE with values", context.GeneratedValueWithDataAnnotations.AsNoTracking().ToList());
public class EntityContext : DbContext
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseSqlServer(new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()));
base.OnConfiguring(optionsBuilder);
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().HasKey(x => x.ID);
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.Identity).UseIdentityColumn();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.Computed).HasComputedColumnSql("'Ignore'");
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.Concurrency).IsConcurrencyToken();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.DefaultValue).HasDefaultValue("Entity Framework Extensions");
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.RowVersion).IsRowVersion();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.ValueGeneratedNever).ValueGeneratedNever();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.ValueGeneratedOnAdd).ValueGeneratedOnAdd();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.ValueGeneratedOnAddOrUpdate).ValueGeneratedOnAddOrUpdate();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.ValueGeneratedOnUpdate).ValueGeneratedOnUpdate();
modelBuilder.Entity<GeneratedValueWithDataAnnotation>().Property(x => x.ValueGeneratedOnUpdateSometimes).ValueGeneratedOnUpdateSometimes();
base.OnModelCreating(modelBuilder);
public DbSet<GeneratedValueWithDataAnnotation> GeneratedValueWithDataAnnotations { get; set; }
public class GeneratedValueWithDataAnnotation
public string TestName { get; set; }
public Guid ID { get; set; }
public int Identity { get; set; }
public string Computed { get; set; }
public string Concurrency { get; set; }
public string DefaultValue { get; set; }
public string RowVersion { get; set; }
public string ValueGeneratedNever { get; set; }
public string ValueGeneratedOnAdd { get; set; }
public string ValueGeneratedOnAddOrUpdate { get; set; }
public string ValueGeneratedOnUpdate { get; set; }
public string ValueGeneratedOnUpdateSometimes { get; set; }