Exemplo n.º 1
0
    protected internal override Expression VisitEmbeddedEntity(EmbeddedEntityExpression eee)
    {
        var bindings = VisitBindings(eee.Bindings);
        var mixins   = eee.Mixins == null ? null : Visit(eee.Mixins, VisitMixinEntity);
        var hasValue = Visit(eee.HasValue);

        if (eee.Bindings != bindings || eee.HasValue != hasValue || eee.EntityContext != null)
        {
            return(new EmbeddedEntityExpression(eee.Type, hasValue, bindings, mixins, eee.FieldEmbedded, eee.ViewTable, null));
        }
        return(eee);
    }
Exemplo n.º 2
0
    protected internal virtual Expression VisitEmbeddedEntity(EmbeddedEntityExpression eee)
    {
        var bindings      = Visit(eee.Bindings, VisitFieldBinding);
        var mixins        = eee.Mixins == null ? null : Visit(eee.Mixins, VisitMixinEntity);
        var hasValue      = Visit(eee.HasValue);
        var entityContext = eee.EntityContext == null ? null : VisitEntityContextInfo(eee.EntityContext);

        if (eee.Bindings != bindings || eee.Mixins != mixins || eee.HasValue != hasValue || eee.EntityContext != entityContext)
        {
            return(new EmbeddedEntityExpression(eee.Type, hasValue, bindings, mixins, eee.FieldEmbedded, eee.ViewTable, entityContext));
        }
        return(eee);
    }
Exemplo n.º 3
0
        protected internal override Expression VisitEmbeddedEntity(EmbeddedEntityExpression eee)
        {
            var embeddedParam = Expression.Parameter(eee.Type);

            var embeddedBindings = new List <Expression>
            {
                Expression.Assign(embeddedParam, Expression.New(eee.Type))
            };

            if (typeof(EmbeddedEntity).IsAssignableFrom(eee.Type))
            {
                embeddedBindings.Add(Expression.Call(retriever, miModifiablePostRetrieving.MakeGenericMethod(eee.Type), embeddedParam));
            }

            embeddedBindings.AddRange(eee.Bindings.Select(b =>
            {
                var field = Expression.Field(embeddedParam, b.FieldInfo);

                var value = b.Binding is ChildProjectionExpression cpe ? VisitMListChildProjection(cpe, field) :
                            Convert(Visit(b.Binding), b.FieldInfo.FieldType);

                return(Expression.Assign(field, value));
            }));

            if (eee.Mixins != null)
            {
                var blocks = eee.Mixins.Select(m => AssignMixin(embeddedParam, m)).ToList();
                embeddedBindings.AddRange(blocks);
            }

            embeddedBindings.Add(embeddedParam);
            var block = Expression.Block(eee.Type, new[] { embeddedParam }, embeddedBindings);

            return(Expression.Condition(Expression.Equal(Visit(eee.HasValue.Nullify()), Expression.Constant(true, typeof(bool?))),
                                        block,
                                        Expression.Constant(null, block.Type)));
        }