Dapper在DML操作上返回模型(属性类)

时间:2018-09-30 22:19:32

标签: c# .net dapper

我正在尝试在数据库事务上实现缓存,并且希望它们在发生等效的数据库操作时添加,更新和从缓存中删除。

class MainMenu(tk.Menu):
    def __init__(self, parent, controller):
        tk.Menu.__init__(self, master=None)
        self.master = parent
        self.controller = controller
        print("building menu bar")
        self.add_cascade(label="File", menu=self.file_menu(self))
        self.add_cascade(label="Settings", menu=self.settings_menu(self))

说我有一个插入表的方法

public class ModelExample
{
        public string code { get; set; }
        public string description { get; set; }
        public string site { get; set; }
}

我希望结果实际返回ModelClass,而不是整数。所以基本上,我想要插入的结果,以便可以将其添加到缓存中。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以尝试在select个值之后输入insert into个参数。 然后使用QueryFirstOrDefaultAsync<TModel>执行SQL获取模型。

string SQLStatement = @"insert into modeltable(code,description,site) values (@code,@description,@site)

SELECT @code code,
        @description description,
        @site site";

ModelExample model = connection.QueryFirstOrDefaultAsync<ModelExample>(SQLStatement,parameter).Result;

答案 1 :(得分:0)

对于MS SQL,您可以使用OUTPUT子句访问插入的行:

[Test]
public async Task DapperOutputClauseUsage()
{
    // Arrange
    var conn = new SqlConnection("YourDatabaseConnectionString");
    await conn.OpenAsync();
    var ex = new ModelExample
    {
        code = "code",
        description = "description",
        site = "site"
    };

    // Act
    var result = await conn.QuerySingleAsync<ModelExample>(@"INSERT INTO ModelTable(code, description, site)
                                                             OUTPUT INSERTED.*
                                                             VALUES (@code, @description, @site)", ex);
    // Assert
    Assert.AreEqual(result.code, ex.code);
    Assert.AreEqual(result.description, ex.description);
    Assert.AreEqual(result.site, ex.site);

}

public class ModelExample
{
    public string code { get; set; }
    public string description { get; set; }
    public string site { get; set; }
}

如果主键上有IDENTITY,则也会返回它。您只需要向模型类添加Id属性。您还可以对OUTPUT INSERTED.*OUTPUT DELETED.*查询使用UPDATEDELETE来连续访问更改。希望能帮助到你。