Example #1
0
    public static void PreSaving(BigStringMixin mixin, PreSavingContext ctx)
    {
        var bs = (BigStringEmbedded)mixin.MainEntity;

        PropertyRoute pr = FindPropertyRoute(bs);

        var config = Configurations.GetOrThrow(pr);

        switch (config.Mode)
        {
        case BigStringMode.Database:
            break;

        case BigStringMode.File:
            if (bs.Modified == ModifiedState.SelfModified)
            {
                mixin.File = string.IsNullOrEmpty(bs.Text) ? null : new FilePathEmbedded(config.FileTypeSymbol !, pr.PropertyInfo !.Name + ".txt", Encoding.UTF8.GetBytes(bs.Text));
                ctx.InvalidateGraph();
            }
            break;

        case BigStringMode.Migrating_FromDatabase_ToFile:
            if (bs.Modified == ModifiedState.SelfModified || bs.Text.HasText() && mixin.File == null)
            {
                mixin.File = string.IsNullOrEmpty(bs.Text) ? null : new FilePathEmbedded(config.FileTypeSymbol !, pr.PropertyInfo !.Name + ".txt", Encoding.UTF8.GetBytes(bs.Text));
                ctx.InvalidateGraph();
            }
            break;

        case BigStringMode.Migrating_FromFile_ToDatabase:
            if (bs.Modified == ModifiedState.SelfModified || string.IsNullOrEmpty(bs.Text) && mixin.File != null)
            {
                bs.Text = mixin.File == null ? null : Encoding.UTF8.GetString(mixin.File.GetByteArray());
                ctx.InvalidateGraph();
                mixin.File?.DeleteFileOnCommit();
            }
            break;

        default:
            break;
        }
    }
Example #2
0
 static void EntityEventsGlobal_PreSaving(Entity ident, PreSavingContext ctx)
 {
     if (strategies.TryGet(ident.GetType(), IsolationStrategy.None) != IsolationStrategy.None && IsolationEntity.Current != null)
     {
         if (ident.Mixin <IsolationMixin>().Isolation == null)
         {
             ident.Mixin <IsolationMixin>().Isolation = IsolationEntity.Current;
             ctx.InvalidateGraph();
         }
         else if (!ident.Mixin <IsolationMixin>().Isolation.Is(IsolationEntity.Current))
         {
             throw new ApplicationException(IsolationMessage.Entity0HasIsolation1ButCurrentIsolationIs2.NiceToString(ident, ident.Mixin <IsolationMixin>().Isolation, IsolationEntity.Current));
         }
     }
 }