public void OnEntityTypeAdded_calls_apply_on_conventions() { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Conventions.Clear(); var convention = new Mock<IModelConvention>(); builder.Conventions.Add(convention.Object); builder.Entity<Entity>(); convention.Verify(c => c.Apply(It.Is<EntityType>(t => t.Type == typeof(Entity)))); }
private static IModel BuildModel( bool createProducts = true, bool createCategory = true, bool createFeaturedProductCategory = true, bool createFeaturedProduct = true) { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Entity <Product>(); builder.Entity <Category>(); var categoryType = model.GetEntityType(typeof(Category)); var productType = model.GetEntityType(typeof(Product)); var categoryFk = productType.AddForeignKey(categoryType.GetKey(), productType.GetProperty("CategoryId")); var featuredProductFk = categoryType.AddForeignKey(productType.GetKey(), categoryType.GetProperty("FeaturedProductId")); featuredProductFk.IsUnique = true; if (createProducts) { categoryType.AddNavigation(new Navigation(categoryFk, "Products", pointsToPrincipal: false)); } if (createCategory) { productType.AddNavigation(new Navigation(categoryFk, "Category", pointsToPrincipal: true)); } if (createFeaturedProductCategory) { productType.AddNavigation(new Navigation(featuredProductFk, "FeaturedProductCategory", pointsToPrincipal: false)); } if (createFeaturedProduct) { categoryType.AddNavigation(new Navigation(featuredProductFk, "FeaturedProduct", pointsToPrincipal: true)); } return(model); }
public void OnEntityTypeAdded_calls_apply_on_conventions() { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Conventions.Clear(); var convention = new Mock <IModelConvention>(); builder.Conventions.Add(convention.Object); builder.Entity <Entity>(); convention.Verify(c => c.Apply(It.Is <EntityType>(t => t.Type == typeof(Entity)))); }
private static IModel BuildModel( bool createProducts = true, bool createCategory = true, bool createFeaturedProductCategory = true, bool createFeaturedProduct = true) { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Entity<Product>(); builder.Entity<Category>(); var categoryType = model.GetEntityType(typeof(Category)); var productType = model.GetEntityType(typeof(Product)); var categoryFk = productType.AddForeignKey(categoryType.GetKey(), productType.GetProperty("CategoryId")); var featuredProductFk = categoryType.AddForeignKey(productType.GetKey(), categoryType.GetProperty("FeaturedProductId")); featuredProductFk.IsUnique = true; if (createProducts) { categoryType.AddNavigation(new Navigation(categoryFk, "Products", pointsToPrincipal: false)); } if (createCategory) { productType.AddNavigation(new Navigation(categoryFk, "Category", pointsToPrincipal: true)); } if (createFeaturedProductCategory) { productType.AddNavigation(new Navigation(featuredProductFk, "FeaturedProductCategory", pointsToPrincipal: false)); } if (createFeaturedProduct) { categoryType.AddNavigation(new Navigation(featuredProductFk, "FeaturedProduct", pointsToPrincipal: true)); } return model; }
private static IModel BuildModel() { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Entity<Product>(); builder.Entity<Category>(); var productType = model.GetEntityType(typeof(Product)); var categoryType = model.GetEntityType(typeof(Category)); categoryType.GetProperty("Id").ValueGenerationOnAdd = ValueGenerationOnAdd.None; productType.AddForeignKey(new Key(new[] { categoryType.GetProperty("PrincipalId") }), productType.GetProperty("DependentId")); return model; }
private static IModel BuildModel() { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Entity<Product>(); builder.Entity<Category>(); builder.Entity<Dogegory>(); var productType = model.GetEntityType(typeof(Product)); var categoryType = model.GetEntityType(typeof(Category)); productType.AddForeignKey(new Key(new[] { categoryType.GetProperty("PrincipalId") }), productType.GetProperty("DependentId")); var locationType = new EntityType("Location"); var idProperty = locationType.AddProperty("Id", typeof(int), shadowProperty: true, concurrencyToken: false); locationType.AddProperty("Planet", typeof(string), shadowProperty: true, concurrencyToken: false); locationType.SetKey(idProperty); model.AddEntityType(locationType); return model; }
// TODO: convert to OnModelCreated public static ModelBuilder CreateModel() { var model = new Model(); var modelBuilder = new ConventionModelBuilder(model); // TODO: Uncomment when complex types are supported //builder.ComplexType<Location>(); modelBuilder .Entity<Chassis>() .Key(c => c.TeamId); modelBuilder .Entity<Driver>(ps => { ps.Key(d => d.Id); ps.Property(d => d.CarNumber); ps.Property(d => d.Championships); ps.Property(d => d.FastestLaps); ps.Property(d => d.Name); ps.Property(d => d.Podiums); ps.Property(d => d.Poles); ps.Property(d => d.Races); ps.Property(d => d.TeamId); ps.Property(d => d.Wins); }); modelBuilder .Entity<Engine>() .Key(e => e.Id); // TODO: Complex type // .Property(c => c.StorageLocation); modelBuilder.Entity<EngineSupplier>(b => { b.Key(e => e.Id); b.Property(e => e.Name); }); modelBuilder .Entity<Gearbox>(ps => { ps.Key(g => g.Id); ps.Property(g => g.Name); ps.Property<int>("EngineId", shadowProperty: true); }); // TODO: Complex type //builder // .ComplexType<Location>() // .Properties(ps => // { // // TODO: Use lambda expression // ps.Property<double>("Latitude", concurrencyToken: true); // // TODO: Use lambda expression // ps.Property<double>("Longitude", concurrencyToken: true); // }); modelBuilder.Entity<Sponsor>(b => { b.Key(s => s.Id); b.Property(s => s.Name); }); // TODO: Complex type //builder // .ComplexType<SponsorDetails>() // .Properties(ps => // { // ps.Property(s => s.Days); // ps.Property(s => s.Space); // }); modelBuilder .Entity<Team>(ps => { ps.Key(t => t.Id); ps.Property(t => t.Constructor); ps.Property(t => t.ConstructorsChampionships); ps.Property(t => t.DriversChampionships); ps.Property<int>("EngineId", shadowProperty: true); ps.Property(t => t.FastestLaps); ps.Property(t => t.GearboxId); ps.Property(t => t.Name); ps.Property(t => t.Poles); ps.Property(t => t.Principal); ps.Property(t => t.Races); ps.Property(t => t.Tire); ps.Property(t => t.Victories); }); modelBuilder .Entity<TestDriver>() .Key(t => t.Id); modelBuilder .Entity<TitleSponsor>(); // TODO: Complex type // .Property(t => t.Details); var chassisType = model.GetEntityType(typeof(Chassis)); var driverType = model.GetEntityType(typeof(Driver)); var engineType = model.GetEntityType(typeof(Engine)); var engineSupplierType = model.GetEntityType(typeof(EngineSupplier)); var gearboxType = model.GetEntityType(typeof(Gearbox)); var teamType = model.GetEntityType(typeof(Team)); var sponsorType = model.GetEntityType(typeof(Sponsor)); // TODO: Use FAPIS when available // TODO: Sponsor * <-> * Team { // Team * <-> 1 Engine var teamEngineIdFk = teamType.AddForeignKey(engineType.GetKey(), teamType.GetProperty("EngineId")); teamType.AddNavigation(new Navigation(teamEngineIdFk, "Engine", pointsToPrincipal: true)); engineType.AddNavigation(new Navigation(teamEngineIdFk, "Teams", pointsToPrincipal: false)); } { // Team -> 1? Gearbox var teamGearboxIdFk = teamType.AddForeignKey(gearboxType.GetKey(), teamType.GetProperty("GearboxId")); teamType.AddNavigation(new Navigation(teamGearboxIdFk, "Gearbox", pointsToPrincipal: true)); } { // Driver * <-> 1 Team var driverTeamIdFk = driverType.AddForeignKey(teamType.GetKey(), driverType.GetProperty("TeamId")); driverType.AddNavigation(new Navigation(driverTeamIdFk, "Team", pointsToPrincipal: true)); teamType.AddNavigation(new Navigation(driverTeamIdFk, "Drivers", pointsToPrincipal: false)); } { // Engine * <-> 1 EngineSupplier var engineEngineSupplierIdFk = engineType.AddForeignKey(engineSupplierType.GetKey(), engineType.GetProperty("EngineSupplierId")); engineType.AddNavigation(new Navigation(engineEngineSupplierIdFk, "EngineSupplier", pointsToPrincipal: true)); engineSupplierType.AddNavigation(new Navigation(engineEngineSupplierIdFk, "Engines", pointsToPrincipal: false)); } { // Engine -> * Gearbox var gearboxEngineIdFk = gearboxType.AddForeignKey(engineType.GetKey(), gearboxType.GetProperty("EngineId")); engineType.AddNavigation(new Navigation(gearboxEngineIdFk, "Gearboxes", pointsToPrincipal: false)); } // TODO: Remove once temporary keys can be overridden teamType.GetProperty("Id").ValueGenerationOnAdd = ValueGenerationOnAdd.None; teamType.GetProperty("Id").ValueGenerationOnSave = ValueGenerationOnSave.None; // TODO: Remove when FAPI supports this teamType.GetProperty("EngineId").IsNullable = true; engineType.AddProperty("EngineSupplierId", typeof(int), shadowProperty: false, concurrencyToken: true); engineType.AddProperty("Name", typeof(string), shadowProperty: false, concurrencyToken: true); chassisType.AddProperty("Version", typeof(byte[]), shadowProperty: false, concurrencyToken: true) .ValueGenerationOnSave = ValueGenerationOnSave.WhenInsertingAndUpdating; driverType.AddProperty("Version", typeof(byte[]), shadowProperty: false, concurrencyToken: true) .ValueGenerationOnSave = ValueGenerationOnSave.WhenInsertingAndUpdating; teamType.AddProperty("Version", typeof(byte[]), shadowProperty: false, concurrencyToken: true) .ValueGenerationOnSave = ValueGenerationOnSave.WhenInsertingAndUpdating; sponsorType.AddProperty("Version", typeof(byte[]), shadowProperty: false, concurrencyToken: true) .ValueGenerationOnSave = ValueGenerationOnSave.WhenInsertingAndUpdating; return modelBuilder; }
private static IModel BuildModel() { var model = new Model(); var builder = new ConventionModelBuilder(model); builder.Entity<Product>(); builder.Entity<Category>(); builder.Entity<ProductDetail>(); builder.Entity<Order>(); builder.Entity<OrderLine>().Key(e => new { e.OrderId, e.ProductId }); builder.Entity<OrderLineDetail>().Key(e => new { e.OrderId, e.ProductId }); var categoryType = model.GetEntityType(typeof(Category)); var productType = model.GetEntityType(typeof(Product)); var productDetailType = model.GetEntityType(typeof(ProductDetail)); var orderType = model.GetEntityType(typeof(Order)); var orderLineType = model.GetEntityType(typeof(OrderLine)); var orderLineDetailType = model.GetEntityType(typeof(OrderLineDetail)); var categoryFk = productType.AddForeignKey(categoryType.GetKey(), productType.GetProperty("CategoryId")); var productDetailFk = productDetailType.AddForeignKey(productType.GetKey(), productDetailType.GetProperty("Id")); productDetailFk.IsUnique = true; var orderFk = orderLineType.AddForeignKey(orderType.GetKey(), orderLineType.GetProperty("OrderId")); var productFk = orderLineType.AddForeignKey(productType.GetKey(), orderLineType.GetProperty("ProductId")); var orderLineFk = orderLineDetailType.AddForeignKey(orderLineType.GetKey(), orderLineDetailType.GetProperty("OrderId"), orderLineDetailType.GetProperty("ProductId")); orderLineFk.IsUnique = true; categoryType.AddNavigation(new Navigation(categoryFk, "Products", pointsToPrincipal: false)); productType.AddNavigation(new Navigation(categoryFk, "Category", pointsToPrincipal: true)); productDetailType.AddNavigation(new Navigation(productDetailFk, "Product", pointsToPrincipal: true)); productType.AddNavigation(new Navigation(productDetailFk, "Detail", pointsToPrincipal: false)); orderType.AddNavigation(new Navigation(orderFk, "OrderLines", pointsToPrincipal: false)); orderLineType.AddNavigation(new Navigation(orderFk, "Order", pointsToPrincipal: true)); productType.AddNavigation(new Navigation(productFk, "OrderLines", pointsToPrincipal: false)); orderLineType.AddNavigation(new Navigation(productFk, "Product", pointsToPrincipal: true)); orderLineType.AddNavigation(new Navigation(orderLineFk, "Detail", pointsToPrincipal: false)); orderLineDetailType.AddNavigation(new Navigation(orderLineFk, "OrderLine", pointsToPrincipal: true)); return model; }