我在项目中使用Dapper ORM使用SqlConnection和SqlCommand类,但我遇到了一个奇怪的问题。当我使用SqlCommand在db表中插入一行时,它总是正常工作,当我选择更新的数据表格表时,一切都很好但是在关闭之后我没有提交应用程序更改,因为数据已保存在某些缓存中。例如,我创建了一个只有两列(UserId(PK)和UserName(Unique))的简单表,即使在这种情况下,也不会保存更改。我正在使用以下代码插入一行:
using (SqlConnection c = new SqlConnection(Settings.Default.UsersConnectionString))
{
c.Open();
using (SqlCommand d = new SqlCommand())
{
d.CommandText = "INSERT INTO Users (UserName) VALUES ('SomeName')";
d.CommandType = System.Data.CommandType.Text;
d.Connection = c;
int t = d.ExecuteNonQuery();
}
c.Close();
}
这个代码在精巧的应该是:
var name = "SomeName";
int t = c.Execute("INSERT INTO Users (UserName) VALUES (@name)", new {name});
Dapper没有内部事务管理,必须使用可选的事务参数传递它。
我的直觉告诉我你要连接到另一个数据库以插入数据。无论是Damiens的隐式交易内容,都很容易验证。