gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:02 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com