using System; using System.Linq; using EntityFramework.Jet.FunctionalTests.TestUtilities; using EntityFrameworkCore.Jet; using Extensions.DependencyInjection; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Xunit; namespace EntityFramework.Jet.FunctionalTests { public class DefaultValuesTest : IDisposable { private readonly IServiceProvider _serviceProvider = new ServiceCollection() .AddEntityFrameworkJet() .BuildServiceProvider(); [Fact] public void Can_use_SQL_Server_default_values() { using (var context = new ChipsContext(_serviceProvider, TestStore.Name)) { context.Database.EnsureDeleted(); context.Database.EnsureCreated(); context.Chippers.Add(new Chipper { Id = "Default" }); context.SaveChanges(); var honeyDijon = context.Add(new KettleChips { Name = "Honey Dijon" }).Entity; var buffaloBleu = context.Add(new KettleChips { Name = "Buffalo Bleu", BestBuyDate = new DateTime(2111, 1, 11) }).Entity; context.SaveChanges(); Assert.Equal(new DateTime(2035, 9, 25), honeyDijon.BestBuyDate); Assert.Equal(new DateTime(2111, 1, 11), buffaloBleu.BestBuyDate); } using (var context = new ChipsContext(_serviceProvider, TestStore.Name)) { Assert.Equal(new DateTime(2035, 9, 25), context.Chips.Single(c => c.Name == "Honey Dijon").BestBuyDate); Assert.Equal(new DateTime(2111, 1, 11), context.Chips.Single(c => c.Name == "Buffalo Bleu").BestBuyDate); } } private class ChipsContext : DbContext { private readonly IServiceProvider _serviceProvider; private readonly string _databaseName; public ChipsContext(IServiceProvider serviceProvider, string databaseName) { _serviceProvider = serviceProvider; _databaseName = databaseName; } public DbSet Chips { get; set; } public DbSet Chippers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseJet(JetTestStore.CreateConnectionString(_databaseName), b => b.ApplyConfiguration()) .UseInternalServiceProvider(_serviceProvider); protected override void OnModelCreating(ModelBuilder modelBuilder) => modelBuilder.Entity(b => { b.Property(e => e.BestBuyDate) .ValueGeneratedOnAdd() .HasDefaultValue(new DateTime(2035, 9, 25)); b.Property(e => e.ChipperId) .IsRequired() .HasDefaultValue("Default"); }); } private class KettleChips { public int Id { get; set; } public string Name { get; set; } public DateTime BestBuyDate { get; set; } public string ChipperId { get; set; } public Chipper Manufacturer { get; set; } } private class Chipper { public string Id { get; set; } } public DefaultValuesTest() { TestStore = JetTestStore.Create("DefaultValuesTest"); } protected JetTestStore TestStore { get; } public virtual void Dispose() => TestStore.Dispose(); } }