EntityFramework Raw SQL Вставка с выводом Не работает - PullRequest
1 голос
/ 07 мая 2020

У меня есть следующий код:

    [HttpPost, Authorize]
    public int AddLocation([FromBody]dynamic formBody)
    {

        List<object> parameters = new List<object>();

        parameters.Add(new SqlParameter("companyID", (int)formBody.companyID));
        parameters.Add(new SqlParameter("locationName", (string)formBody.locationName));
        parameters.Add(new SqlParameter("locationCode", (string)formBody.locationCode));
        parameters.Add(new SqlParameter("locationDescription", (string)formBody.locationDescription));


        string addStmt = "INSERT INTO INV_LOCATIONS (NAME, CODE, DESCRIPTION, COMPANY_ID) OUTPUT inserted.ID VALUES (@locationName, @locationCode, @locationDescription, @companyID)";
        var output = database.Database.SqlQuery<int>(addStmt, parameters);
        var test = output.First();
        SqlParameter[] parameters2 = {
            new SqlParameter("locationID", output),
            new SqlParameter("quantity", (int)formBody.quantity),
            new SqlParameter("partID", (int)formBody.partID)
        };
        string SqlStatement = "INSERT INTO INV_QUANTITY (PART_ID, LOCATION_ID, QUANTITY) VALUES (@partID, @locationID, @quantity)";
        var stmtExecute = database.Database.ExecuteSqlCommand(SqlStatement, parameters2);
        return output.First();
    }

Я не могу получить ВЫХОД или эту вставку в целом для запуска. Когда я копирую этот запрос непосредственно в SSMS и заменяю параметры переданными значениями, я получаю выведенный идентификатор, и создается новая строка. Я проверил все параметры, они есть и работают. Я делал что-то подобное раньше, и это сработало, но это не работает. Рабочая версия немного отличается, но я попробовал рабочий код, но он здесь не сработал.

Рабочий код:

        string SqlStatement = 
            "IF NOT EXISTS (SELECT 1 FROM GLOBAL_CATEGORIES WHERE CATEGORY_NAME = @catName) " +
            "BEGIN " +
                "INSERT INTO GLOBAL_CATEGORIES (CATEGORY_NAME, MODIFIED_BY, DATE_CREATED, DATE_LAST_UPDATED) OUTPUT inserted.CATEGORY_ID VALUES (@catName, @modifiedBy, @date, @date)" +
            "END " +
            "ELSE SELECT CATEGORY_ID FROM GLOBAL_CATEGORIES WHERE CATEGORY_NAME = @catName";

        object[] parameters =
        {
            new SqlParameter("catName", (string)formBody.catName),
            new SqlParameter("modifiedBy", claimUsername),
            new SqlParameter("date", date)
        };

        var globalID = database.Database.SqlQuery<int>(SqlStatement, parameters);
        //var globalID = database.Database.ExecuteSqlCommand(SqlStatement, parameters);

        SqlStatement = "INSERT INTO COMPANY_CATEGORIES (COMPANY_ID, CATEGORY_ID, SORT_ORDER, MODIFIED_BY, DATE_CREATED, DATE_LAST_UPDATED) VALUES (@companyID, @globalID, 0, @modifiedBy, @date, @date)";

        SqlParameter[] parameters2 = {
            new SqlParameter("modifiedBy", claimUsername),
            new SqlParameter("date", date),
            new SqlParameter("companyID", (int)formBody.companyID),
            new SqlParameter("globalID", globalID.ToList().ToArray()[0])
        };

В рабочей версии я сделал .ToList().ToArray()[0] для получить значение. Я получаю следующую ошибку с кодом, который у меня есть сейчас, даже если я использую «рабочий» код:

System.ArgumentException: 'No mapping exists from object type System.Collections.Generic.List`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] to a known managed provider native type.'

Any Ideas? Я более чем счастлив поделиться более подробной информацией, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...