c# - 不能在 Dapper 查询中使用自定义类型作为参数插入 SQLite 数据库

标签 c# database sqlite dapper

我有一个 Player 类,它有一个 Id、用户名和等级:

class Player
{
    public int Id { get; set; }
    public string Username { get; set; }
    public Rank Rank { get; set; }
}

我想将一个新播放器插入到 SQLite 数据库中,为此我正在使用 Dapper。

在表单按钮上按下:

Player newPlayer = new Player();
Rank newRank = new Rank();
newPlayer.Username = txtUsername.Text;
newPlayer.Rank = newRank;

if (newPlayer.Username != null && newPlayer.Username != String.Empty)
{               
    SQLiteDataAccess.SavePlayer(newPlayer);
    Close();
}

我的 C“SQLiteDataAccess”中的 RUD 方法

public static void SavePlayer(Player player)
{
    using (IDbConnection connection = new SQLiteConnection(LoadConnectionString()))
    {
        connection.Execute("insert into Players (Username, Rank) values (@Username, @Rank)",
                           player);
    }
}


我的“Rank”类由一个字符串名称和一些整数组成。我有一个构造函数,将它们全部设置为默认值“-”和 0。

当我使用这个自定义“排名”类型作为参数时出现问题:

System.NotSupportedException: 'The member Rank of type Prototype1.Rank cannot be used as a parameter value'

有没有解决这个问题的方法,或者不使用 Dapper 的其他方法?

最佳答案

首先,使用 string.IsNullOrEmpty() 而不是 if (newPlayer.Username != null && newPlayer.Username != String.Empty)

Dapper 本身不做这种插入。您需要首先添加您的等级等级,并将 id 绑定(bind)到您的 Player 等级中的值类型 RankID。例如:

public class Player
{
    public int Id { get; set; }
    public string Username { get; set; }
    public int RankId { get; set; }
    public Rank Rank { get; set; }
}

public class Rank
{
    public int Id { get; set; }
    public string Something { get; set; }
}

public class Repo
{
    public void Save(Player player)
    {
        // .. open connection
        player.RankId = connection.ExecuteScalar<int>("insert into Rank (Something) values (@Something)", player.Rank);
        player.Id = connection.ExecuteScalar<int>("insert into Player (Username, RankId) values (@Username, @RankId", player);
    }
}

关于c# - 不能在 Dapper 查询中使用自定义类型作为参数插入 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55199857/

相关文章:

c# - 如何获得最小起订量设置以根据输入更改输出参数?

python - 在进程sqlite之间共享内存数据库

android - 如何从MySQL访问android应用程序中的数据并在离线模式下显示?

android - 打开sqlite数据库失败android

.props 文件中的 C# 引用

c# - 数据绑定(bind)和重构代码

c# - WPF 工具包图表控件绑定(bind)

android - 使用 sql 数据库项填充 ListView

PHP:数据库缓存(内存中有 sqlite)

javascript - 如何将数据传递到 Google 表单中的字段