Database.ExecuteSqlCommand的返回值是什么?

Mat*_*hew 3 c# sql sql-server entity-framework

稍微修改一下这个问题的答案,假设我运行这段代码:

public int SaveOrUpdate(MyEntity entity)
{
    var sql =  @"MERGE INTO MyEntity
                USING 
                (
                   SELECT   @id as Id
                            @myField AS MyField
                ) AS entity
                ON  MyEntity.Id = entity.Id
                WHEN MATCHED THEN
                    UPDATE 
                    SET     Id = @id
                            MyField = @myField
                WHEN NOT MATCHED THEN
                    INSERT (Id, MyField)
                    VALUES (@Id, @myField);"

    object[] parameters = {
        new SqlParameter("@id", entity.Id),
        new SqlParameter("@myField", entity.myField)
    };
    return context.Database.ExecuteSqlCommand(sql, parameters);
}
Run Code Online (Sandbox Code Playgroud)

这将实际运行并返回一个 int 。int 是什么意思?文档只是

执行命令后数据库返回的结果。

我做了几个测试,看起来如果修改了一行,则为 1;如果没有任何更改,则为 0。返回值是修改的行数吗?

Pau*_*erø 5

对于大多数数据库,这意味着受命令影响的行数。但我理论上认为,上帝禁止这样的事情存在,数据库供应商可以自由地返回任何内容,然后您需要在特定数据库的文档中查找该数字的含义。