public void ComparePropertyComputedColNameReversed() { //SETUP var options = GetComputedColDbOptions(); DatabaseModel localDatabaseModel; using (var context = new MyEntityComputedColDbContext(options)) { var dtService = context.GetDesignTimeService(); var serviceProvider = dtService.GetDesignTimeProvider(); var factory = serviceProvider.GetService <IDatabaseModelFactory>(); var connectionString = context.Database.GetDbConnection().ConnectionString; context.Database.EnsureCreated(); localDatabaseModel = factory.Create(connectionString, new string[] { }, new string[] { }); } using (var context = new MyEntityDbContext(_options)) { var handler = new Stage1Comparer(context.Model, context.GetType().Name); //ATTEMPT var hasErrors = handler.CompareModelToDatabase(localDatabaseModel); //VERIFY hasErrors.ShouldBeTrue(); var errors = CompareLog.ListAllErrors(handler.Logs).ToList(); errors.Count.ShouldEqual(3); errors[0].ShouldEqual( "DIFFERENT: MyEntity->Property 'MyDateTime', column type. Expected = datetime2, found = datetime"); errors[1].ShouldEqual( "DIFFERENT: MyEntity->Property 'MyDateTime', computed column sql. Expected = <null>, found = getutcdate()"); errors[2].ShouldEqual( "DIFFERENT: MyEntity->Property 'MyDateTime', value generated. Expected = Never, found = OnAddOrUpdate"); } }
public void ComparePropertyComputedColSelf() { //SETUP var options = GetComputedColDbOptions(); using (var context = new MyEntityComputedColDbContext(options)) { var dtService = context.GetDesignTimeService(); var serviceProvider = dtService.GetDesignTimeProvider(); var factory = serviceProvider.GetService <IDatabaseModelFactory>(); var connectionString = context.Database.GetDbConnection().ConnectionString; context.Database.EnsureCreated(); #if NETCOREAPP2_1 var localDatabaseModel = factory.Create(connectionString, new string[] { }, new string[] { }); #elif NETCOREAPP3_0 var localDatabaseModel = factory.Create(connectionString, new DatabaseModelFactoryOptions(new string[] { }, new string[] { })); #endif var handler = new Stage1Comparer(context.Model, context.GetType().Name); //ATTEMPT var hasErrors = handler.CompareModelToDatabase(localDatabaseModel); //VERIFY hasErrors.ShouldBeTrue(); //The setting of a computed col changed the column type var errors = CompareLog.ListAllErrors(handler.Logs).ToList(); errors.Count.ShouldEqual(1); errors[0].ShouldEqual( "DIFFERENT: MyEntity->Property 'MyDateTime', column type. Expected = datetime2, found = datetime"); } }
public void TestSqlLiteAcceptsComputedCol() { //SETUP var options = SqliteInMemory.CreateOptions <MyEntityComputedColDbContext>(); using (var context = new MyEntityComputedColDbContext(options)) { //ATTEMPT context.Database.EnsureCreated(); //VERIFY } }
public void TestSqlLiteDoesNotSupportComputedCol() { //SETUP var options = SqliteInMemory.CreateOptions <MyEntityComputedColDbContext>(); using (var context = new MyEntityComputedColDbContext(options)) { //ATTEMPT var ex = Assert.Throws <NotSupportedException>(() => context.Database.EnsureCreated()); //VERIFY ex.Message.ShouldStartWith("SQLite doesn't support computed columns."); } }
public void TestSqlLiteAcceptsComputedColButDoesntWork() { //SETUP var options = SqliteInMemory.CreateOptions <MyEntityComputedColDbContext>(); using (var context = new MyEntityComputedColDbContext(options)) { context.Database.EnsureCreated(); //ATTEMPT context.Add(new MyEntity()); var ex = Assert.Throws <DbUpdateException>(() => context.SaveChanges()); //VERIFY Assert.StartsWith("SQLite Error 19: 'NOT NULL constraint failed:", ex.InnerException.Message); } }
public void TestInMemoryAcceptsComputedColButDoesntWork() { //SETUP var options = EfInMemory.CreateOptions <MyEntityComputedColDbContext>(); using (var context = new MyEntityComputedColDbContext(options)) { context.Database.EnsureCreated(); //ATTEMPT context.Add(new MyEntity()); context.SaveChanges(); //VERIFY context.Set <MyEntity>().First().MyDateTime.ShouldEqual(new DateTime()); } }
public void ComparePropertyComputedColName() { //SETUP var optionsBuilder = new DbContextOptionsBuilder <MyEntityComputedColDbContext>(); optionsBuilder.UseSqlServer(_connectionString); using (var context = new MyEntityComputedColDbContext(optionsBuilder.Options)) { var handler = new Stage1Comparer(context.Model, context.GetType().Name); //ATTEMPT var hasErrors = handler.CompareModelToDatabase(_databaseModel); //VERIFY hasErrors.ShouldBeTrue(); var errors = CompareLog.ListAllErrors(handler.Logs).ToList(); errors.Count.ShouldEqual(2); errors[0].ShouldEqual( "DIFFERENT: MyEntity->Property 'MyDateTime', computed column sql. Expected = getutcdate(), found = <null>"); errors[1].ShouldEqual( "DIFFERENT: MyEntity->Property 'MyDateTime', value generated. Expected = OnAddOrUpdate, found = Never"); } }