Dapper, чтобы возвратить модель (класс свойства) на операциях DML - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь внедрить кэширование в нашей транзакции базы данных, и я хочу, чтобы они добавляли, обновляли и удаляли из кэша при выполнении эквивалентных операций с базой данных.

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

говорят, что у меня есть метод, который вставляется в таблицу

int result;
string query = "insert into modeltable(code,description,site) values (@code,@description,@site);
DynamicParameters parameter = new DynamicParameters();
parameter.Add("@code", code, DbType.String);
parameter.Add("@description", description, DbType.String);
parameter.Add("@site", site, DbType.String);
                connection.Open();
result = await connection.ExecuteAsync(query, parameter)

Я хочу, чтобы результат фактически возвращал ModelClass вместо целого числа.В общем, я хочу получить результаты вставки, чтобы я мог добавить их в кеш.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

В случае 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.* с запросами UPDATE и DELETE, чтобы получить доступ к изменениям в строке.Надеюсь, поможет.

0 голосов
/ 01 октября 2018

Вы можете попробовать 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;
...