/// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public RelationshipConfiguration(
            [NotNull] EntityConfiguration entityConfiguration,
            [NotNull] IForeignKey foreignKey,
            [NotNull] string dependentEndNavigationPropertyName,
            [NotNull] string principalEndNavigationPropertyName,
            DeleteBehavior onDeleteAction)
        {
            Check.NotNull(entityConfiguration, nameof(entityConfiguration));
            Check.NotNull(foreignKey, nameof(foreignKey));
            Check.NotEmpty(dependentEndNavigationPropertyName, nameof(dependentEndNavigationPropertyName));
            Check.NotEmpty(principalEndNavigationPropertyName, nameof(principalEndNavigationPropertyName));

            EntityConfiguration = entityConfiguration;
            ForeignKey = foreignKey;
            DependentEndNavigationPropertyName = dependentEndNavigationPropertyName;
            PrincipalEndNavigationPropertyName = principalEndNavigationPropertyName;
            OnDeleteAction = onDeleteAction;
        }
        public virtual RelationshipConfiguration CreateRelationshipConfiguration(
            [NotNull] EntityConfiguration entityConfiguration,
            [NotNull] IForeignKey foreignKey,
            [NotNull] string dependentEndNavigationPropertyName,
            [NotNull] string principalEndNavigationPropertyName,
            DeleteBehavior onDeleteAction)
        {
            Check.NotNull(entityConfiguration, nameof(entityConfiguration));
            Check.NotNull(foreignKey, nameof(foreignKey));
            Check.NotEmpty(dependentEndNavigationPropertyName, nameof(dependentEndNavigationPropertyName));
            Check.NotEmpty(principalEndNavigationPropertyName, nameof(principalEndNavigationPropertyName));

            return new RelationshipConfiguration(
                entityConfiguration,
                foreignKey,
                dependentEndNavigationPropertyName,
                principalEndNavigationPropertyName,
                onDeleteAction);
        }
Beispiel #3
0
 public abstract TestReferenceOwnershipBuilder <TEntity, TRelatedEntity> OnDelete(DeleteBehavior deleteBehavior);
 public OptionalBlogsContext(DeleteBehavior deleteBehavior, bool quiet = true)
 {
     _deleteBehavior = deleteBehavior;
     _quiet          = quiet;
 }
Beispiel #5
0
 public override TestReferenceCollectionBuilder <TEntity, TRelatedEntity> OnDelete(DeleteBehavior deleteBehavior)
 => new NonGenericTestReferenceCollectionBuilder <TEntity, TRelatedEntity>(
     ReferenceCollectionBuilder.OnDelete(deleteBehavior));
 /// <summary>
 /// 设置默认的一对多级联删除行为
 /// </summary>
 /// <param name="modelBuilder"></param>
 /// <param name="deleteBehavior">删除行为,默认为限制级联删除<seealso cref="DeleteBehavior.Restrict"/></param>
 /// <returns></returns>
 public static ModelBuilder DefaultDeleteBehavior(this ModelBuilder modelBuilder, DeleteBehavior deleteBehavior = DeleteBehavior.Restrict)
 {
     // 限制一对多级联删除
     foreach (var relationship in modelBuilder.Model.GetEntityTypes()
              .SelectMany(e => e.GetForeignKeys()))
     {
         relationship.DeleteBehavior = deleteBehavior;
     }
     return(modelBuilder);
 }
 /// <summary>
 ///     Configures how a delete operation is applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public new virtual CollectionOwnershipBuilder <TEntity, TDependentEntity> OnDelete(DeleteBehavior deleteBehavior)
 {
     Builder = Builder.DeleteBehavior(deleteBehavior, ConfigurationSource.Explicit);
     return(this);
 }
Beispiel #8
0
 public abstract TestCollectionOwnershipBuilder <TEntity, TDependentEntity> OnDelete(DeleteBehavior deleteBehavior);
 public HasOneWithManyAttribute(Type type, DeleteBehavior behavior)
 {
     RelatedTypeName = type.FullName;
     DeleteBehavior  = behavior;
 }
 /// <summary>
 ///     Configures how a delete operation is applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public new virtual ReferenceOwnershipBuilder <TEntity, TRelatedEntity> OnDelete(DeleteBehavior deleteBehavior)
 {
     Builder = Builder.DeleteBehavior(deleteBehavior, ConfigurationSource.Explicit);
     return(this);
 }
Beispiel #11
0
        /// <summary>
        /// Configure Delete Behaviour across all keys on types that are not excluded.
        /// </summary>
        /// <param name="builder">Model Builder.</param>
        /// <param name="deleteBehavior">Delete Behaviour to configure.</param>
        /// <param name="excludedTypes">Types to exclude from change.</param>
        /// <returns>ModelBuilder.</returns>
        public static ModelBuilder ConfigureDeleteBehaviour(this ModelBuilder builder, DeleteBehavior deleteBehavior, params Type[] excludedTypes)
        {
            var excludedEntities = new List <IMutableEntityType>();

            foreach (var excludedType in excludedTypes)
            {
                excludedEntities.Add(builder.Model.FindEntityType(excludedType));
            }

            foreach (var relationship in builder.Model.GetEntityTypes().Except(excludedEntities).SelectMany(e => e.GetForeignKeys()))
            {
                relationship.DeleteBehavior = DeleteBehavior.Restrict;
            }

            return(builder);
        }
Beispiel #12
0
 /// <summary>
 ///     This API supports the Entity Framework Core infrastructure and is not intended to be used 
 ///     directly from your code. This API may change or be removed in future releases.
 /// </summary>
 public virtual void SetDeleteBehavior(DeleteBehavior deleteBehavior, ConfigurationSource configurationSource)
 {
     _deleteBehavior = deleteBehavior;
     UpdateDeleteBehaviorConfigurationSource(configurationSource);
 }
Beispiel #13
0
        /// <summary>
        /// Configure Delete Behaviour across all keys on types that are not excluded, adding default Identity tables to the exclusion list.
        /// </summary>
        /// <typeparam name="TUser">Identity User Type.</typeparam>
        /// <typeparam name="TKey">Identity Key type.</typeparam>
        /// <param name="builder">Model Builder.</param>
        /// <param name="deleteBehavior">Delete Behaviour to configure.</param>
        /// <param name="excludedTypes">Types to exclude from change in addition to Identity types.</param>
        /// <returns>ModelBuilder.</returns>
        public static ModelBuilder ConfigureDeleteBehaviourExcludingIdentity <TUser, TKey>(this ModelBuilder builder, DeleteBehavior deleteBehavior, params Type[] excludedTypes)
            where TKey : IEquatable <TKey>
        {
            excludedTypes = excludedTypes.Concat(new[] {
                typeof(TUser),
                typeof(IdentityRole <TKey>),
                typeof(IdentityUserRole <TKey>),
                typeof(IdentityUserClaim <TKey>),
                typeof(IdentityUserLogin <TKey>),
                typeof(IdentityUserToken <TKey>),
                typeof(IdentityRoleClaim <TKey>),
            }).ToArray();

            return(ConfigureDeleteBehaviour(builder, deleteBehavior, excludedTypes));
        }
 public ModelBuilder <T> AddForeignKey <T2>(Expression <Func <T, T2> > field, Expression <Func <T2, T> > foreignField, bool required = true, DeleteBehavior deleteBehavior = DeleteBehavior.Cascade) where T2 : class => call(() => modelBuilder.Entity <T>().HasOne(field).WithOne(foreignField).IsRequired(required));
 public ModelBuilder <T> OnDelete <T2>(Expression <Func <T, IEnumerable <T2> > > field, Expression <Func <T2, T> > foreignField, DeleteBehavior deleteBehavior) where T2 : class => call(() => modelBuilder.Entity <T>().HasMany(field).WithOne(foreignField).OnDelete(deleteBehavior));
        public static string ConvertReferentialActionToDeleteBehavior(this ReferentialAction?refAct, DeleteBehavior entityBehavior)
        {
            if ((entityBehavior == DeleteBehavior.ClientSetNull || entityBehavior == DeleteBehavior.Restrict) &&
                refAct == ReferentialAction.NoAction)
            {
                //A no action constrait can map to either ClientSetNull or Restrict
                return(entityBehavior.ToString());
            }

            return(refAct?.ToString() ?? ReferentialAction.NoAction.ToString());
        }
 /// <summary>
 ///     Configures how a delete operation is applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public new virtual ReferenceReferenceBuilder <TEntity, TRelatedEntity> OnDelete(DeleteBehavior deleteBehavior)
 => new ReferenceReferenceBuilder <TEntity, TRelatedEntity>(
     Builder.DeleteBehavior(deleteBehavior, ConfigurationSource.Explicit), this);
Beispiel #18
0
 /// <summary>
 ///     Configures the operation applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public virtual ReferenceCollectionBuilder OnDelete(DeleteBehavior deleteBehavior)
 => new ReferenceCollectionBuilder(
     Builder.OnDelete(deleteBehavior, ConfigurationSource.Explicit),
     this);
        public EnumLookupOptions SetDeleteBehavior(DeleteBehavior deleteBehavior)
        {
            DeleteBehavior = deleteBehavior;

            return(this);
        }
 public DocumentInfo <TEntity> SetDeleteBehavior <TReference>(Expression <Func <TReference, object> > keySelector, DeleteBehavior behavior = DeleteBehavior.Cascade) where TReference : class
 {
     DeleteSettings.Add(new DeleteBuilder()
     {
         EntityType   = typeof(TReference),
         PropertyName = keySelector.GetMemberName().ToCameCase(),
         Behavior     = behavior
     });
     return(this);
 }
 public RequiredBlogsContext(DeleteBehavior deleteBehavior, bool quiet = true)
 {
     _deleteBehavior = deleteBehavior;
     _quiet          = quiet;
 }
 public ForeignKeyAttribute(string[] columns, Type pricipalType, string[] piColumns = null,
                            DeleteBehavior behavior = DeleteBehavior.Restrict)
 {
 }
Beispiel #23
0
 public static void CascadeAllRelationsOnDelete(this ModelBuilder modelBuilder, DeleteBehavior behavior = DeleteBehavior.Restrict)
 {
     // This is the only way to do it right now is to iterate through all relationships
     foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
     {
         relationship.DeleteBehavior = behavior;
     }
 }
Beispiel #24
0
 private static void SetDeleteBehavior <T1, T2>(ModelBuilder modelBuilder, Expression <Func <T1, T2> > oneWay, Expression <Func <T1, object> > secondWay, DeleteBehavior deleteBehavior = DeleteBehavior.Restrict)
     where T1 : class
     where T2 : class
 {
     modelBuilder.Entity <T1>()
     .HasOne(oneWay)
     .WithMany()
     .HasForeignKey(secondWay)
     .OnDelete(deleteBehavior);
 }
 public MultiContext(DbContextOptions <MultiContext> options, DeleteBehavior behavior, bool isRequired) : base(options)
 {
     _deleteBehavior = behavior;
     _isRequired     = isRequired;
 }
Beispiel #26
0
 /// <summary>
 ///     Configures how a delete operation is applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public virtual ReferenceOwnershipBuilder OnDelete(DeleteBehavior deleteBehavior)
 {
     Builder = Builder.DeleteBehavior(deleteBehavior, ConfigurationSource.Explicit);
     return(this);
 }
Beispiel #27
0
 /// <summary>
 ///     Configures how a delete operation is applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public virtual ReferenceOwnershipBuilder OnDelete(DeleteBehavior deleteBehavior)
 => new ReferenceOwnershipBuilder(Builder.DeleteBehavior(deleteBehavior, ConfigurationSource.Explicit), this);
 public override TestReferenceReferenceBuilder <TEntity, TRelatedEntity> OnDelete(DeleteBehavior deleteBehavior)
 => Wrap(ReferenceReferenceBuilder.OnDelete(deleteBehavior));
 public override TestCollectionOwnershipBuilder <TEntity, TDependentEntity> OnDelete(DeleteBehavior deleteBehavior)
 => Wrap <TEntity, TDependentEntity>(CollectionOwnershipBuilder.OnDelete(deleteBehavior));
Beispiel #30
0
 public abstract TestReferenceCollectionBuilder <TEntity, TRelatedEntity> OnDelete(DeleteBehavior deleteBehavior);
 /// <summary>
 ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
 ///     directly from your code. This API may change or be removed in future releases.
 /// </summary>
 public virtual void SetDeleteBehavior(DeleteBehavior deleteBehavior, ConfigurationSource configurationSource)
 {
     _deleteBehavior = deleteBehavior;
     UpdateDeleteBehaviorConfigurationSource(configurationSource);
 }
 /// <summary>
 ///     Configures how a delete operation is applied to dependent entities in the relationship when the
 ///     principal is deleted or the relationship is severed.
 /// </summary>
 /// <param name="deleteBehavior"> The action to perform. </param>
 /// <returns> The same builder instance so that multiple configuration calls can be chained. </returns>
 public new virtual ReferenceCollectionBuilder <TPrincipalEntity, TDependentEntity> OnDelete(DeleteBehavior deleteBehavior)
 => new ReferenceCollectionBuilder <TPrincipalEntity, TDependentEntity>(
     Builder.DeleteBehavior(deleteBehavior, ConfigurationSource.Explicit), this);
Beispiel #33
0
 ReferenceCollectionBuilder CreateOneToMany <EntityType, OneType>(EntityTypeBuilder <EntityType> builder, string oneName,
                                                                  string manyName, string foreignKey, DeleteBehavior deleteBehavior = DeleteBehavior.Restrict) where EntityType : class where OneType : class
 {
     return(builder.HasOne <OneType>(oneName)
            .WithMany(manyName)
            .HasForeignKey(foreignKey)
            .OnDelete(deleteBehavior)
            .HasConstraintName(string.Format("FK_{0}_{1}", oneName, manyName)));
 }