dotnet / efcore

EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.
https://docs.microsoft.com/ef/
MIT License
13.66k stars 3.15k forks source link

SQLite: HasDefaultValueSql + ValueGeneratedOnAddOrUpdate loses default value #4502

Closed rowanmiller closed 8 years ago

rowanmiller commented 8 years ago
public class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=Sample.db");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
        .Property(b => b.Modified)
        .HasDefaultValueSql("CURRENT_DATE");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public DateTime Modified { get; set; }
}

Correctly adds a default value to the column...

CREATE TABLE "Blog" (
    "BlogId" INTEGER NOT NULL CONSTRAINT "PK_Blog" PRIMARY KEY AUTOINCREMENT,
    "Modified" TEXT NOT NULL DEFAULT (CURRENT_DATE)
)

Adding in a call to ValueGeneratedOnAddOrUpdate...

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
    .Property(b => b.Modified)
    .HasDefaultValueSql("CURRENT_DATE")
    .ValueGeneratedOnAddOrUpdate();
}

Results in no default constraint...

CREATE TABLE "Blog" (
    "BlogId" INTEGER NOT NULL CONSTRAINT "PK_Blog" PRIMARY KEY AUTOINCREMENT,
    "Modified" TEXT NOT NULL
)
ajcvickers commented 8 years ago

Same root cause as #4501, so closing as duplicate.