Ejemplo n.º 1
0
        private static IModel BuildModel()
        {
            var model   = new Model();
            var builder = new ConventionModelBuilder(model);

            builder.Entity <Product>(b =>
            {
                b.OneToMany(e => e.OrderLines, e => e.Product);
                b.OneToOne(e => e.Detail, e => e.Product);
            });

            builder.Entity <Category>().OneToMany(e => e.Products, e => e.Category);

            builder.Entity <ProductDetail>();

            builder.Entity <Order>().OneToMany(e => e.OrderLines, e => e.Order);

            builder.Entity <OrderLineDetail>().Key(e => new { e.OrderId, e.ProductId });

            builder.Entity <OrderLine>(b =>
            {
                b.Key(e => new { e.OrderId, e.ProductId });
                b.OneToOne(e => e.Detail, e => e.OrderLine);
            });

            return(model);
        }
        private static IModel BuildModel()
        {
            var model   = new Model();
            var builder = new ConventionModelBuilder(model);

            builder.Entity <Product>(b =>
            {
                b.OneToOne(e => e.OriginalProduct, e => e.AlternateProduct)
                .ForeignKey <Product>(e => e.AlternateProductId);

                b.OneToOne(e => e.Detail, e => e.Product);
            });

            builder.Entity <Category>().OneToMany(e => e.Products, e => e.Category);

            builder.Entity <ProductDetail>();

            builder.Entity <ProductPhoto>(b =>
            {
                b.Key(e => new { e.ProductId, e.PhotoId });
                b.OneToMany(e => e.ProductTags, e => e.Photo)
                .ForeignKey(e => new { e.ProductId, e.PhotoId });
            });

            builder.Entity <ProductReview>(b =>
            {
                b.Key(e => new { e.ProductId, e.ReviewId });
                b.OneToMany(e => e.ProductTags, e => e.Review)
                .ForeignKey(e => new { e.ProductId, e.ReviewId });
            });

            builder.Entity <ProductTag>();

            return(model);
        }
Ejemplo n.º 3
0
        private static IModel BuildModel()
        {
            var model   = new Model();
            var builder = new ConventionModelBuilder(model);

            builder.Entity <Product>();
            builder.Entity <Category>();
            builder.Entity <ProductDetail>();

            var categoryType      = model.GetEntityType(typeof(Category));
            var productType       = model.GetEntityType(typeof(Product));
            var productDetailType = model.GetEntityType(typeof(ProductDetail));

            var categoryFk         = productType.AddForeignKey(categoryType.GetKey(), productType.GetProperty("CategoryId"));
            var alternateProductFk = productType.AddForeignKey(productType.GetKey(), productType.GetProperty("AlternateProductId"));
            var productDetailFk    = productDetailType.AddForeignKey(productType.GetKey(), productDetailType.GetProperty("Id"));

            categoryType.AddNavigation(new Navigation(categoryFk, "Products", pointsToPrincipal: false));
            productType.AddNavigation(new Navigation(categoryFk, "Category", pointsToPrincipal: true));

            productType.AddNavigation(new Navigation(alternateProductFk, "AlternateProduct", pointsToPrincipal: true));
            productType.AddNavigation(new Navigation(alternateProductFk, "OriginalProduct", pointsToPrincipal: false));

            productDetailType.AddNavigation(new Navigation(productDetailFk, "Product", pointsToPrincipal: true));
            productType.AddNavigation(new Navigation(productDetailFk, "Detail", pointsToPrincipal: false));

            return(model);
        }
Ejemplo n.º 4
0
        private IModel CreateModel(DbContext context)
        {
            var model        = new Model();
            var modelBuilder = new ConventionModelBuilder(model);

            foreach (var setInfo in _setFinder.FindSets(context))
            {
                modelBuilder.GetEntity(setInfo.EntityType);
            }

            context.OnModelCreating(modelBuilder);

            return(model);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        private static IModel BuildModel()
        {
            var model   = new Model();
            var builder = new ConventionModelBuilder(model);

            builder.Entity <Product>();
            builder.Entity <Category>();
            builder.Entity <ProductDetail>();
            builder.Entity <ProductPhoto>().Key(e => new { e.ProductId, e.PhotoId });
            builder.Entity <ProductReview>().Key(e => new { e.ProductId, e.ReviewId });
            builder.Entity <ProductTag>();

            var categoryType      = model.GetEntityType(typeof(Category));
            var productType       = model.GetEntityType(typeof(Product));
            var productDetailType = model.GetEntityType(typeof(ProductDetail));
            var productPhotoType  = model.GetEntityType(typeof(ProductPhoto));
            var productReviewType = model.GetEntityType(typeof(ProductReview));
            var productTagType    = model.GetEntityType(typeof(ProductTag));

            var categoryFk         = productType.AddForeignKey(categoryType.GetKey(), productType.GetProperty("CategoryId"));
            var alternateProductFk = productType.AddForeignKey(productType.GetKey(), productType.GetProperty("AlternateProductId"));

            alternateProductFk.IsUnique = true;
            var productDetailFk = productDetailType.AddForeignKey(productType.GetKey(), productDetailType.GetProperty("Id"));

            productDetailFk.IsUnique = true;

            var photoFk  = productTagType.AddForeignKey(productPhotoType.GetKey(), productTagType.GetProperty("ProductId"), productTagType.GetProperty("PhotoId"));
            var reviewFk = productTagType.AddForeignKey(productReviewType.GetKey(), productTagType.GetProperty("ProductId"), productTagType.GetProperty("ReviewId"));

            categoryType.AddNavigation(new Navigation(categoryFk, "Products", pointsToPrincipal: false));
            productType.AddNavigation(new Navigation(categoryFk, "Category", pointsToPrincipal: true));

            productType.AddNavigation(new Navigation(alternateProductFk, "AlternateProduct", pointsToPrincipal: true));
            productType.AddNavigation(new Navigation(alternateProductFk, "OriginalProduct", pointsToPrincipal: false));

            productDetailType.AddNavigation(new Navigation(productDetailFk, "Product", pointsToPrincipal: true));
            productType.AddNavigation(new Navigation(productDetailFk, "Detail", pointsToPrincipal: false));

            productTagType.AddNavigation(new Navigation(photoFk, "Photo", pointsToPrincipal: true));
            productTagType.AddNavigation(new Navigation(reviewFk, "Review", pointsToPrincipal: true));
            productPhotoType.AddNavigation(new Navigation(photoFk, "ProductTags", pointsToPrincipal: false));
            productReviewType.AddNavigation(new Navigation(reviewFk, "ProductTags", pointsToPrincipal: false));

            return(model);
        }
Ejemplo n.º 7
0
        private static IModel BuildModel()
        {
            var model   = new Model();
            var builder = new ConventionModelBuilder(model);

            builder.Entity <Product>();
            builder.Entity <Category>();

            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);
        }
Ejemplo n.º 8
0
        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>();

            var categoryType = model.GetEntityType(typeof(Category));
            var productType  = model.GetEntityType(typeof(Product));

            var categoryIdFk
                = productType.AddForeignKey(categoryType.GetKey(), productType.GetProperty("CategoryId"));

            categoryIdFk.StorageName = "Category_Products";

            categoryType.AddNavigation(new Navigation(categoryIdFk, "Products"));
            productType.AddNavigation(new Navigation(categoryIdFk, "Category"));

            return(model);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        // 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>(b => b.Key(c => c.TeamId));

            modelBuilder.Entity <Driver>(b =>
            {
                b.Key(d => d.Id);
                b.Property(d => d.CarNumber);
                b.Property(d => d.Championships);
                b.Property(d => d.FastestLaps);
                b.Property(d => d.Name);
                b.Property(d => d.Podiums);
                b.Property(d => d.Poles);
                b.Property(d => d.Races);
                b.Property(d => d.TeamId);
                b.Property(d => d.Wins);
            });

            modelBuilder.Entity <Engine>(b =>
            {
                b.Key(e => e.Id);
                b.OneToMany(e => e.Teams, e => e.Engine);
                b.OneToMany(e => e.Gearboxes);
            });

            // TODO: Complex type
            // .Property(c => c.StorageLocation);

            modelBuilder.Entity <EngineSupplier>(b =>
            {
                b.Key(e => e.Id);
                b.Property(e => e.Name);
                b.OneToMany(e => e.Engines, e => e.EngineSupplier);
            });

            modelBuilder.Entity <Gearbox>(b =>
            {
                b.Key(g => g.Id);
                b.Property(g => g.Name);
                b.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>(b =>
            {
                b.Key(t => t.Id);
                b.Property(t => t.Constructor);
                b.Property(t => t.ConstructorsChampionships);
                b.Property(t => t.DriversChampionships);
                b.Property <int>("EngineId", shadowProperty: true);
                b.Property(t => t.FastestLaps);
                b.Property(t => t.GearboxId);
                b.Property(t => t.Name);
                b.Property(t => t.Poles);
                b.Property(t => t.Principal);
                b.Property(t => t.Races);
                b.Property(t => t.Tire);
                b.Property(t => t.Victories);
                b.OneToMany(e => e.Drivers, e => e.Team);
                b.OneToOne(e => e.Gearbox).ForeignKey <Team>();
            });

            modelBuilder.Entity <TestDriver>(b => b.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 gearboxType = model.GetEntityType(typeof(Gearbox));
            var teamType    = model.GetEntityType(typeof(Team));
            var sponsorType = model.GetEntityType(typeof(Sponsor));

            // TODO: Sponsor * <-> * Team

            // 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);
        }