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