Esempio n. 1
0
    public static void PostRetrieving(BigStringMixin mixin, PostRetrievingContext 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:
            bs.Text = mixin.File == null ? null : Encoding.UTF8.GetString(mixin.File.GetByteArray());
            break;

        case BigStringMode.Migrating_FromDatabase_ToFile:
            if (mixin.File != null)
            {
                bs.Text = Encoding.UTF8.GetString(mixin.File.GetByteArray());
            }
            break;

        case BigStringMode.Migrating_FromFile_ToDatabase:
            if (bs.Text == null && mixin.File != null)
            {
                bs.Text = Encoding.UTF8.GetString(mixin.File.GetByteArray());
            }
            break;

        default:
            break;
        }
    }
Esempio n. 2
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;
        }
    }