Beispiel #1
0
        public void SimpleOnConflict()
        {
            Expression <Func <Cliente> > valueExpr = () => new Cliente
            {
                Nombre   = "Rafael",
                Apellido = "Salguero",
            };

            Expression <Func <Cliente, int> > indexExpr = x => x.IdRegistro;

            Expression <Func <Cliente, Cliente, Cliente> > updateExpr = (excluded, orig) => new Cliente
            {
                Nombre   = excluded.Nombre + orig.Nombre,
                Apellido = orig.Apellido,
                Tipo     = TipoPersona.Fisica
            };

            var doUpdate = new OnConflictDoUpdateClause(
                set: updateExpr,
                where : null
                );

            var onConf = new OnConflictClause(
                indexExpressions: new LambdaExpression[] { indexExpr },
                where : null,
                doUpdate: doUpdate
                );

            var clause = new InsertClause(
                table: "Cliente",
                value: valueExpr.Body,
                query: null,
                onConflict: onConf,
                returning: null
                );

            var ret      = SqlInsertConverter.InsertToString(clause, ParamMode.Substitute, new SqlParamDic()).Sql;
            var expected = @"
INSERT INTO ""Cliente"" (""Nombre"", ""Apellido"")
VALUES ('Rafael', 'Salguero')
ON CONFLICT (""IdRegistro"") DO UPDATE
SET
    ""Nombre"" = (EXCLUDED.""Nombre"" || ""Cliente"".""Nombre""), 
    ""Apellido"" = ""Cliente"".""Apellido"", 
    ""Tipo"" = 0
";

            AssertSql.AreEqual(expected, ret);
        }
 protected PostgresInsertBase(IServiceProvider serviceProvider, InsertClause <TColumns> insertClause, OnConflictClause onConflictClause)
     : base(serviceProvider)
 {
     InsertClause     = insertClause;
     OnConflictClause = onConflictClause;
 }