예제 #1
0
        protected virtual void Configure(OwnedNavigationBuilder <Level3, Level4> l4)
        {
            l4.Ignore(e => e.OneToOne_Optional_Self4)
            .Ignore(e => e.OneToMany_Required_Self4)
            .Ignore(e => e.OneToMany_Required_Self_Inverse4)
            .Ignore(e => e.OneToMany_Optional_Self4)
            .Ignore(e => e.OneToMany_Optional_Self_Inverse4);

            l4.Property(e => e.Id).ValueGeneratedNever();

            l4.HasOne(e => e.OneToOne_Optional_PK_Inverse4)
            .WithOne(e => e.OneToOne_Optional_PK3)
            .HasPrincipalKey <Level3>()
            .IsRequired(false);

            l4.HasOne(e => e.OneToOne_Required_FK_Inverse4)
            .WithOne(e => e.OneToOne_Required_FK3)
            .HasForeignKey <Level4>(e => e.Level3_Required_Id)
            .IsRequired()
            .OnDelete(DeleteBehavior.Restrict);

            l4.HasOne(e => e.OneToOne_Optional_FK_Inverse4)
            .WithOne(e => e.OneToOne_Optional_FK3)
            .HasForeignKey <Level4>(e => e.Level3_Optional_Id)
            .IsRequired(false);

            l4.HasOne(e => e.OneToMany_Required_Inverse4)
            .WithMany(e => e.OneToMany_Required3)
            .IsRequired()
            .OnDelete(DeleteBehavior.Restrict);

            l4.HasOne(e => e.OneToMany_Optional_Inverse4)
            .WithMany(e => e.OneToMany_Optional3)
            .IsRequired(false);
        }
        protected virtual void Configure(OwnedNavigationBuilder <Level2, Level3> l3)
        {
            var level3 = l3.Ignore(e => e.OneToOne_Optional_Self3)
                         .Ignore(e => e.OneToMany_Required_Self3)
                         .Ignore(e => e.OneToMany_Required_Self_Inverse3)
                         .Ignore(e => e.OneToMany_Optional_Self3)
                         .Ignore(e => e.OneToMany_Optional_Self_Inverse3)
                         .OwnedEntityType;

            l3.Property(e => e.Id).ValueGeneratedNever();

            l3.HasOne(e => e.OneToOne_Optional_PK_Inverse3)
            .WithOne(e => e.OneToOne_Optional_PK2)
            .HasPrincipalKey <Level2>(e => e.Id)
            .IsRequired(false);

            l3.HasOne(e => e.OneToOne_Required_FK_Inverse3)
            .WithOne(e => e.OneToOne_Required_FK2)
            .HasForeignKey <Level3>(e => e.Level2_Required_Id)
            .IsRequired()
            .OnDelete(DeleteBehavior.Restrict);

            l3.HasOne(e => e.OneToOne_Optional_FK_Inverse3)
            .WithOne(e => e.OneToOne_Optional_FK2)
            .HasForeignKey <Level3>(e => e.Level2_Optional_Id)
            .IsRequired(false);

            l3.HasOne(e => e.OneToMany_Required_Inverse3)
            .WithMany(e => e.OneToMany_Required2)
            .IsRequired()
            .OnDelete(DeleteBehavior.Restrict);

            l3.HasOne(e => e.OneToMany_Optional_Inverse3)
            .WithMany(e => e.OneToMany_Optional2)
            .IsRequired(false);

            ForeignKey level4Fk;
            var        level4 = level3.Model.AddEntityType(
                "Level1.OneToOne_Required_PK1#Level2.OneToOne_Required_PK2#Level3.OneToOne_Required_PK3#Level4",
                typeof(Level4));

            using (var batch = ((Model)level3.Model).ConventionDispatcher.DelayConventions())
            {
                level4Fk          = (ForeignKey)level4.AddForeignKey(level4.FindProperty(nameof(Level4.Id)), level3.FindPrimaryKey(), level3);
                level4Fk.IsUnique = true;
                level4Fk.SetPrincipalToDependent(nameof(Level3.OneToOne_Required_PK3), ConfigurationSource.Explicit);
                level4Fk.SetDependentToPrincipal(nameof(Level4.OneToOne_Required_PK_Inverse4), ConfigurationSource.Explicit);
                level4Fk.DeleteBehavior = DeleteBehavior.Restrict;
                level4Fk = (ForeignKey)batch.Run(level4Fk);
            }

            Configure(new OwnedNavigationBuilder <Level3, Level4>(level4Fk));
        }
예제 #3
0
        protected virtual void Configure(OwnedNavigationBuilder <Level1, Level2> l2)
        {
            var level2 = l2.Ignore(e => e.OneToOne_Optional_Self2)
                         .Ignore(e => e.OneToMany_Required_Self2)
                         .Ignore(e => e.OneToMany_Required_Self_Inverse2)
                         .Ignore(e => e.OneToMany_Optional_Self2)
                         .Ignore(e => e.OneToMany_Optional_Self_Inverse2)
                         .OwnedEntityType;

            l2.Property(e => e.Id).ValueGeneratedNever();

            l2.HasOne(e => e.OneToOne_Optional_PK_Inverse2)
            .WithOne(e => e.OneToOne_Optional_PK1)
            .HasPrincipalKey <Level1>(e => e.Id)
            .IsRequired(false);

            l2.HasOne(e => e.OneToOne_Required_FK_Inverse2)
            .WithOne(e => e.OneToOne_Required_FK1)
            .HasForeignKey <Level2>(e => e.Level1_Required_Id)
            .IsRequired()
            .OnDelete(DeleteBehavior.Restrict);

            l2.HasOne(e => e.OneToOne_Optional_FK_Inverse2)
            .WithOne(e => e.OneToOne_Optional_FK1)
            .HasForeignKey <Level2>(e => e.Level1_Optional_Id)
            .IsRequired(false);

            l2.HasOne(e => e.OneToMany_Required_Inverse2)
            .WithMany(e => e.OneToMany_Required1)
            .IsRequired()
            .OnDelete(DeleteBehavior.Restrict);

            l2.HasOne(e => e.OneToMany_Optional_Inverse2)
            .WithMany(e => e.OneToMany_Optional1)
            .IsRequired(false);

            ForeignKey level3Fk;
            var        level3 = level2.Model.AddEntityType(typeof(Level3), nameof(Level2.OneToOne_Required_PK2), level2);

            using (var batch = ((Model)level2.Model).ConventionDispatcher.StartBatch())
            {
                level3Fk          = (ForeignKey)level3.AddForeignKey(level3.FindProperty(nameof(Level3.Id)), level2.FindPrimaryKey(), level2);
                level3Fk.IsUnique = true;
                level3Fk.HasPrincipalToDependent(nameof(Level2.OneToOne_Required_PK2), ConfigurationSource.Explicit);
                level3Fk.HasDependentToPrincipal(nameof(Level3.OneToOne_Required_PK_Inverse3), ConfigurationSource.Explicit);
                level3Fk.DeleteBehavior = DeleteBehavior.Restrict;
                level3Fk = batch.Run(level3Fk);
            }

            Configure(new OwnedNavigationBuilder <Level2, Level3>((EntityType)level2, level3Fk.DeclaringEntityType, level3Fk.Builder));
        }
예제 #4
0
            public override TestReferenceNavigationBuilder <TDependentEntity, TNewDependentEntity> HasOne <TNewDependentEntity>(
                Expression <Func <TDependentEntity, TNewDependentEntity> > navigationExpression = null)
            {
                var navigationName = navigationExpression?.GetMemberAccess().GetSimpleMemberName();

                return(new NonGenericStringTestReferenceNavigationBuilder <TDependentEntity, TNewDependentEntity>(
                           navigationName == null
                        ? OwnedNavigationBuilder.HasOne(typeof(TNewDependentEntity).FullName, navigationName)
                        : OwnedNavigationBuilder.HasOne(navigationName)));
            }
 public static void ConfigureOwnedEnumLookup <TEntity, TDependentEntity>(
     this OwnedNavigationBuilder <TEntity, TDependentEntity> ownedNavigationBuilder, EnumLookupOptions enumOptions,
     ModelBuilder modelBuilder) where TEntity : class where TDependentEntity : class
 {
     foreach (IMutableProperty property in ownedNavigationBuilder.OwnedEntityType.GetProperties().ToList())
     {
         ConfigureEnumLookupForProperty(modelBuilder, enumOptions, property,
                                        (enumLookupEntityType) =>
         {
             ownedNavigationBuilder.HasOne(enumLookupEntityType)
             .WithMany()
             .HasPrincipalKey("Id")
             .HasForeignKey(property.Name)
             .OnDelete(enumOptions.DeleteBehavior);
         }, (valueConverter) => { ownedNavigationBuilder.Property(property.Name).HasConversion(valueConverter); });
     }
 }
예제 #6
0
 public override TestReferenceNavigationBuilder <TDependentEntity, TNewRelatedEntity> HasOne <TNewRelatedEntity>(
     Expression <Func <TDependentEntity, TNewRelatedEntity?> >?navigationExpression = null)
     where TNewRelatedEntity : class
 => new GenericStringTestReferenceNavigationBuilder <TDependentEntity, TNewRelatedEntity>(
     OwnedNavigationBuilder.HasOne <TNewRelatedEntity>(navigationExpression?.GetMemberAccess().GetSimpleMemberName()));
 public override TestReferenceNavigationBuilder <TDependentEntity, TNewDependentEntity> HasOne <TNewDependentEntity>(
     Expression <Func <TDependentEntity, TNewDependentEntity> > navigationExpression = null)
 => new NonGenericStringTestReferenceNavigationBuilder <TDependentEntity, TNewDependentEntity>(
     OwnedNavigationBuilder.HasOne(
         typeof(TNewDependentEntity).FullName, navigationExpression?.GetPropertyAccess().GetSimpleMemberName()));
 public override TestReferenceNavigationBuilder <TRelatedEntity, TNewRelatedEntity> HasOne <TNewRelatedEntity>(
     Expression <Func <TRelatedEntity, TNewRelatedEntity> > navigationExpression = null)
 => new GenericTypeTestReferenceNavigationBuilder <TRelatedEntity, TNewRelatedEntity>(
     OwnedNavigationBuilder.HasOne(navigationExpression));