public void Queries_Projections_CanProjectToJoinObject() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var q = from p in context.Products join s in context.Suppliers on p.Id equals s.Id select new JoinedProductSuppliers { Product = p, Supplier = s }; var result = q.ToList(); Assert.Equal(2, result.Count()); Assert.Equal("Banana", result[0].Product.Name); Assert.Equal("Bananas-R-Us", result[0].Supplier.Name); Assert.Equal("Plum", result[1].Product.Name); Assert.Equal("Plums-R-Us", result[1].Supplier.Name); } }
public static IServiceCollection AddDataContext( this IServiceCollection serviceCollection, Action <DataContextOptionsBuilder> builderAction) { var optionsBuilder = new DataContextOptionsBuilder(); builderAction.Invoke(optionsBuilder); serviceCollection.AddSingleton(typeof(IDbContextOptionsConfigurator), optionsBuilder.Options.DbContextOptionsConfiguratorType); serviceCollection.AddSingleton <IDbContextProvider>(x => new DbContextProvider( optionsBuilder.Options.DbContextType, optionsBuilder.Options.DbContextSettings, x.GetRequiredService <IDbContextOptionsConfigurator>())); serviceCollection.AddSingleton(typeof(IDataContext), optionsBuilder.Options.DbContextType); Type factoryType = typeof(DesignTimeDbContextFactory <>).MakeGenericType(optionsBuilder.Options.DbContextType); Type interfaceType = typeof(IDesignTimeDbContextFactory <>).MakeGenericType(optionsBuilder.Options.DbContextType); serviceCollection.AddSingleton(interfaceType, x => Activator.CreateInstance( factoryType, optionsBuilder.Options.DbContextSettings, x.GetRequiredService <IDbContextOptionsConfigurator>())); return(serviceCollection); }
public static ContainerBuilder AddDataContext( this ContainerBuilder containerBuilder, Action <DataContextOptionsBuilder> builderAction) { var optionsBuilder = new DataContextOptionsBuilder(); builderAction.Invoke(optionsBuilder); containerBuilder .RegisterType(optionsBuilder.Options.DbContextOptionsConfiguratorType) .As(typeof(IDbContextOptionsConfigurator)) .SingleInstance(); containerBuilder .RegisterType <DbContextProvider>() .As(typeof(IDbContextProvider)) .SingleInstance() .WithParameter(TypedParameter.From(optionsBuilder.Options.DbContextType)) .WithParameter(TypedParameter.From(optionsBuilder.Options.DbContextSettings)); containerBuilder .RegisterType(optionsBuilder.Options.DbContextType) .As(typeof(IDataContext)) .SingleInstance(); Type factoryType = typeof(DesignTimeDbContextFactory <>).MakeGenericType(optionsBuilder.Options.DbContextType); Type interfaceType = typeof(IDesignTimeDbContextFactory <>).MakeGenericType(optionsBuilder.Options.DbContextType); containerBuilder.RegisterType(factoryType) .As(interfaceType) .SingleInstance() .WithParameter(TypedParameter.From(optionsBuilder.Options.DbContextSettings)); return(containerBuilder); }
public void Querying_LazyLoading_CanLoadEntityCollection() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); Assert.Equal(2, context.Products.Count()); var query = from p in context.Products where p.Name == "Banana" select p; var products = query.ToList <Product>(); Assert.False(products[0].Parts.IsLoaded); var count = products[0].Parts.Count; Assert.Equal(3, count); var parts = products[0].Parts.ToList(); Assert.Equal("Bolt", parts[0].Name); Assert.Equal("Wrench", parts[1].Name); Assert.Equal("Hammer", parts[2].Name); Assert.True(products[0].Parts.IsLoaded); } }
public static ContainerBuilder AddDataContext( this ContainerBuilder containerBuilder, Action <DataContextOptionsBuilder> builderAction) { var optionsBuilder = new DataContextOptionsBuilder(); builderAction.Invoke(optionsBuilder); containerBuilder .RegisterType(optionsBuilder.Options.DbContextOptionsConfiguratorType) .As(typeof(IDbContextOptionsConfigurator)) .SingleInstance(); containerBuilder .Register(c => { var configurator = c.Resolve <IDbContextOptionsConfigurator>(); return(new DbContextProvider( optionsBuilder.Options.DbContextType, optionsBuilder.Options.DbContextSettings, configurator)); }) .As(typeof(IDbContextProvider)) .SingleInstance(); containerBuilder .RegisterType <DataContext>() .As(typeof(IDataContext)) .SingleInstance(); return(containerBuilder); }
public void Database_can_delete_by_pk() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { var createResult = context.Database.Creator.CreateIfNotExists(); var supplier = new Supplier() { //Id is autogenerated Name = "TrinketsRUS" }; context.Suppliers.Add(supplier); var product = new Product() { // Id = 1, Auto generated key Name = "Banana", Price = 4.75, SupplierId = supplier.Id }; context.Products.Add(product); var productsCount = context.Products.Count(); Assert.Equal(1, productsCount); context.Products.Delete(product); Assert.Equal(0, context.Products.Select(p => p.Id).Count()); } }
public async Task Database_can_insert_async() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { var createResult = context.Database.Creator.CreateIfNotExists(); var supplier = new Supplier() { //Id is autogenerated Name = "TrinketsRUS" }; context.Suppliers.Add(supplier); var product = new Product() { // Id = 1, Auto generated key Name = "Banana", Price = 4.75, SupplierId = supplier.Id }; var result = await context.Products.AddAsync(product); Assert.Equal(1, result); } }
public void Mapping_has_valid_configuration_entity_mapping() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new SimpleDataContext(options)) { Assert.Single(context.Model.EntityMappings); var entityMapping = context.Model.EntityMappings.First(); Assert.IsType <EntityMapping <Address> >(entityMapping); var addressEntityMapping = (EntityMapping <Address>)entityMapping; Assert.Equal("Address", addressEntityMapping.TableName); Assert.Equal(4, addressEntityMapping.ColumnMappings.Count); var idPropertyMapping = addressEntityMapping.ColumnMappings.First(p => p.PropertyName == "AddressId"); Assert.IsType <ColumnMapping>(idPropertyMapping); Assert.True(idPropertyMapping.IsKey); var streetPropertyMapping = addressEntityMapping.ColumnMappings.First(p => p.PropertyName == "Street"); Assert.IsType <ColumnMapping>(streetPropertyMapping); Assert.False(streetPropertyMapping.IsKey); var cityPropertyMapping = addressEntityMapping.ColumnMappings.First(p => p.PropertyName == "City"); Assert.IsType <ColumnMapping>(cityPropertyMapping); Assert.False(cityPropertyMapping.IsKey); Assert.Equal("City", cityPropertyMapping.ColumnName); } }
public void Mapping_can_get_set_property_value() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new SimpleDataContext(options)) { Assert.Single(context.Model.EntityMappings); var entityMapping = context.Model.EntityMappings.First(); Assert.IsType <EntityMapping <Address> >(entityMapping); var addressEntityMapping = (EntityMapping <Address>)entityMapping; var testAddress = new Address() { AddressId = 1, Street = "123 Banana Seat", City = "Somewhere", Country = "Canada" }; var country = addressEntityMapping.GetColumn(testAddress, "Country"); Assert.Equal("Canada", country); addressEntityMapping.SetColumn(testAddress, "Country", "USA"); var newCountry = addressEntityMapping.GetColumn(testAddress, "Country"); Assert.Equal("USA", newCountry); } }
public static DataContextOptionsBuilder UseEntityFrameworkWithMsSql( this DataContextOptionsBuilder builder, string?migrationsAsssemblyName = null) { builder.Options.DbContextOptionsConfiguratorType = typeof(MsSqlConfigurator); builder.Options.DbContextSettings.MigrationsAssemblyName = migrationsAsssemblyName; return(builder); }
/// <summary> /// Uses the postgre database. /// </summary> /// <returns>The builder.</returns> /// <param name="builder">Builder.</param> /// <param name="connection">Connection.</param> /// <typeparam name="TContext">Data context.</typeparam> public static DataContextOptionsBuilder <TContext> UsePostgre <TContext>(this DataContextOptionsBuilder <TContext> builder, string connection) where TContext : DataContext { builder.SetDataConfig(connection, (configName, configParams) => { var database = new PostgreProvider(configName, configParams); return(database); }); return(builder); }
public TodoItemDatabase(string dbPath) { var connectionString = "Data Source=" + dbPath; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; _dataContext = new TodoDataContext(options); _dataContext.Database.Creator.CreateIfNotExists(); }
public static TodoDataContext Create(string connectionString) { if (_dataContext == null) { var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; _dataContext = new TodoDataContext(options); } return(_dataContext); }
public DataContext CreateBuilderContextByConnection() { var builder = new DataContextOptionsBuilder <DataContext>(); builder.UseMssql("Data Source=mssql_test;User ID=sa;Password=1qazxsw23edC;Initial Catalog=LightData_Test;"); builder.SetCommandOutput(commandOutput); var options = builder.Build(); DataContext context = new DataContext(options); return(context); }
public void Options_with_command_timeout() { var optionsBuilder = new DataContextOptionsBuilder(); optionsBuilder.UseSqlite("Database=TestDb", o => o.CommandTimeout(45)); var options = optionsBuilder.Options as SqliteOptions; Assert.NotNull(options); Assert.Equal(45, options.CommandTimeout); }
public DataContext CreateBuilderContextByConnection() { var builder = new DataContextOptionsBuilder <DataContext>(); builder.UsePostgre("Server=postgre_test;Port=5432;UserId=postgres;Password=1qazxsw23edC;Database=LightData_Test;"); builder.SetCommandOutput(commandOutput); var options = builder.Build(); DataContext context = new DataContext(options); return(context); }
public DataContext CreateBuilderContextByConnection() { var builder = new DataContextOptionsBuilder <DataContext>(); builder.UseMysql("server=mysql_test;Port=3306;User Id=root;password=1qazxsw23edC;database=LightData_Test;Allow Zero Datetime=True;charset=utf8;Min Pool Size=1;Max Pool Size=5;SslMode=None;"); builder.SetCommandOutput(commandOutput); var options = builder.Build(); DataContext context = new DataContext(options); return(context); }
private static DataContextOptions <TContext> DataContextOptionsFactory <TContext>( IServiceProvider applicationServiceProvider, Action <DataContextOptionsBuilder <TContext> > optionsAction) where TContext : DataContext { var builder = new DataContextOptionsBuilder <TContext>( new DataContextOptions <TContext>()); optionsAction?.Invoke(builder); return(builder.Options); }
public void Options_throws_when_null_connection() { SqliteConnection connection = null; var ex = Assert.Throws <ArgumentNullException>(() => { var options = new DataContextOptionsBuilder <TestDataContext>().UseSqlite(connection).Options; }); Assert.StartsWith("Value cannot be null.", ex.Message); Assert.StartsWith(nameof(connection), ex.ParamName); }
public void Options_throws_with_invalid_command_timeout() { var commandTimeout = -1; var ex = Assert.Throws <ArgumentOutOfRangeException>(() => { var optionsBuilder = new DataContextOptionsBuilder(); optionsBuilder.UseSqlite("Database=test.db", o => o.CommandTimeout(commandTimeout)); }); Assert.StartsWith(nameof(commandTimeout), ex.ParamName); }
public void Options_throws_when_empty_connection_string() { string connectionString = ""; var ex = Assert.Throws <ArgumentException>(() => { var options = new DataContextOptionsBuilder <TestDataContext>().UseSqlite(connectionString).Options; //new TestDbContext( options ); }); Assert.StartsWith(Resources.ConnectionStringCannotBeNullOrEmpty, ex.Message); }
public async void Queries_CountAsync_Works() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var productCount = await context.Products.CountAsync(); Assert.Equal(2, productCount); } }
public async void Queries_FirstAsync_Works() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var plum = await context.Products.FirstAsync(p => p.Name == "Plum"); Assert.True(plum.Name == "Plum"); } }
public void Create_opens_valid_memory_connection() { string connectionString = "Data Source=:memory:"; // FIXME: Why does the generic options fail //var options = new DbContextOptionsBuilder<TestDbContext>().UseSqlite( connectionString ).Options; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { var result = context.Database.Connection.DbConnection.Database; Assert.Equal("main", result); } }
public async void Queries_SumAsync_Works() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var productCost = await context.Products.SumAsync(p => (decimal)p.Price); Assert.True(productCost.Equals(8.0)); } }
public async Task Database_Query_CanReadListAsync() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var products = await context.Products.ToListAsync(); Assert.Equal(2, products.Count()); Assert.Equal("Banana", products[0].Name); Assert.Equal("Plum", products[1].Name); } }
public void Database_can_read_with_pk() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var product = context.Products.First(p => p.Id == 1); var product2 = context.Products.First(p => p.Id == 2); Assert.Equal("Banana", product.Name); Assert.Equal("Plum", product2.Name); } }
public void Querying_EagerLoading_CanLoadEntityReference() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { context.Initialize(); var query = from p in context.Products.FetchOne(p => p.Supplier) select p; var products = query.ToList <Product>(); Assert.True(products[0].Supplier.IsLoaded); Assert.Equal("Bananas-R-Us", products[0].Supplier.Value.Name); } }
public void DatabaseCreator_CreateIfNotExists_ExistsAndHasTables() { const string connectionString = "Data Source=:memory:"; var options = new DataContextOptionsBuilder().UseSqlite(connectionString).Options; using (var context = new TestDataContext(options)) { var result = context.Database.Connection.DbConnection.Database; Assert.Equal("main", result); Assert.True(context.Database.Exists()); Assert.False(context.Database.HasTables()); var createResult = context.Database.Creator.CreateIfNotExists(); Assert.True(createResult); Assert.True(context.Database.Exists()); Assert.True(context.Database.HasTables()); } }
public static IServiceCollection AddDataContext( this IServiceCollection serviceCollection, Action <DataContextOptionsBuilder> builderAction) { var optionsBuilder = new DataContextOptionsBuilder(); builderAction.Invoke(optionsBuilder); serviceCollection.AddSingleton(typeof(IDbContextOptionsConfigurator), optionsBuilder.Options.DbContextOptionsConfiguratorType); serviceCollection.AddSingleton <IDbContextProvider>(x => new DbContextProvider( optionsBuilder.Options.DbContextType, optionsBuilder.Options.DbContextSettings, x.GetRequiredService <IDbContextOptionsConfigurator>())); serviceCollection.AddSingleton(typeof(IDataContext), typeof(DataContext)); return(serviceCollection); }