使用 linq 模板插入不返回 id - MySQL

发布于 2024-08-12 18:21:21 字数 534 浏览 3 评论 0原文

我正在使用来自 github 的最新 subsonic dll 和最新 linq 模板。我要插入的数据库是 MySQL。表中的id列为主键自增。

版本: Subsonic.Core.dll - 3.0.0.3 -(2009 年 11 月 18 日从 Github 合并拉取)。

LinqTemplates - 2009 年 7 月 29 日。MySQL.Data.CF.dll

- 6.1.2.0。

该行已插入,但 id 返回为 0。

插入示例:

mysqldb db = new mysqldb.mysqldbDB();
int ID = db.Insert.Into<db.myTable>(
    r => r.message,
    r => r.name,
    r => r.status).Values(
    message,
    name,
    status).Execute();

我做错了什么吗?难道不应该返回新的 id,而不是零吗?

I'm using the latest subsonic dll and the latest linq templates from github. The db i'm inserting into is MySQL. Id column on table is primary key auto increment.

Versions:
Subsonic.Core.dll - 3.0.0.3 - (November 18, 2009 Merged pulls from Github).

LinqTemplates - July 29, 2009.

MySQL.Data.CF.dll - 6.1.2.0.

The row is inserted but the id is returned as 0.

Example of the insert:

mysqldb db = new mysqldb.mysqldbDB();
int ID = db.Insert.Into<db.myTable>(
    r => r.message,
    r => r.name,
    r => r.status).Values(
    message,
    name,
    status).Execute();

Am I doing something wrong? Shouldn't the new id be returned, not zero?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花开柳相依 2024-08-19 18:21:21

发现亚音速核心中的错误。

它位于 Subsonic.Core.Query.Insert.cs 中,

Execute 方法没有返回 long 类型的 id 条件。

我已经将本地版本中的方法重写为:

    public int Execute()
    {
        int returner = 0;

        object result = _provider.ExecuteScalar(GetCommand());
        if(result != null)
        {
            if(result.GetType() == typeof(decimal))
                returner = Convert.ToInt32(result);
            else if (result.GetType() == typeof(int))
                returner = Convert.ToInt32(result);
            else if (result.GetType() == typeof(long))
                returner = Convert.ToInt32(result);
            else
                returner = Convert.ToInt32(result);
        }
        return returner;
    }

我已将多个 if 语句更改为 else if,并添加了 long 的类型比较。另外,我还添加了最后的 else 条件,该条件将转换为 int。不确定这是否是个好主意,但它对我有用。

如果有人想更新源代码那就太好了。如果我很快有时间我会自己更新。

Found the bug in subsonic core.

It's in Subsonic.Core.Query.Insert.cs

The Execute method does not have a condition for id's returned that are of type long.

I've rewritten the method in my local version to:

    public int Execute()
    {
        int returner = 0;

        object result = _provider.ExecuteScalar(GetCommand());
        if(result != null)
        {
            if(result.GetType() == typeof(decimal))
                returner = Convert.ToInt32(result);
            else if (result.GetType() == typeof(int))
                returner = Convert.ToInt32(result);
            else if (result.GetType() == typeof(long))
                returner = Convert.ToInt32(result);
            else
                returner = Convert.ToInt32(result);
        }
        return returner;
    }

I've changed the multiple if statements to else if's and added the type comparison of long. Also I've added the final else condition which does a convert to int. Not sure if that's such a good idea but it works for me.

If someone wants to update the source great. If i find time sometime soon i'll update it myself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文