轻量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新说明

一、功能变化

(一)、强化特性支持

1、部分类型拥有复杂属性;

2、有些属性不是来源于数据库

3、用户在原来的代码中使用 SqlRepoEx ,减少字段与数据库字段之间的冲突;

4、为支持新的特性及优化属性读写,增加了 SimpleWritablePropertyMatcher;

5、增加SqlRepoDbFieldAttribute特性后,如果用户程序仍然为POJO类型,不必标识SqlRepoDbFieldAttribute时,用SimpleWritablePropertyMatcher

6、如果明确要区分,就用WritablePropertyMatcher ;

 string ConnectionString = "Data Source=(Local);Initial Catalog=Northwind;User ID=test;Password=test";

          var connectionProvider = new ConnectionStringConnectionProvider(ConnectionString);

           MsSqlRepoFactory.UseConnectionProvider(connectionProvider);

   // 使用新的属性读写器

           MsSqlRepoFactory.UseWritablePropertyMatcher(new SimpleWritablePropertyMatcher());

           var repository = MsSqlRepoFactory.Create<Customers>();

 类型代码(使用明确特定  使用 WritablePropertyMatcher )

    public class ToDo
    {
        [NonDatabaseField]
        public string Remark { get; set; }

        [SqlRepoDbField]
        public DateTime CreatedDate { get; set; }

        [SqlRepoDbField]
        public bool IsCompleted { get; set; }

        [SqlRepoDbField]
        public string Task { get; set; }

        [IdentityField]
        public int Id { get; set; }
    }

 类型代码(不指定 使用 SimpleWritablePropertyMatcher)

public class ToDo
    {
        [NonDatabaseField]
        public string Remark { get; set; }
        public DateTime CreatedDate { get; set; }
        public bool IsCompleted { get; set; }
        public string Task { get; set; }
        [IdentityField]
        public int Id { get; set; }
    }

(二)事务支持

 1、在初始仓储时如果使用

MsSqlRepoFactory.UseStatementTransactionExecutor();

2、代码中使用使用方法 repository.GetConnectionProvider.BeginTransaction() 获取事务控制

public void DoTransactionIt()
        {
            var repository = MsSqlRepoFactory.Create<ToDo>();
            var results = repository.Query().Where(c => c.Id < 6);
           foreach (var item in results.Go())
            {
                Console.WriteLine($"{item.Id}\t {item.Task} ");
            }
            using (var tranc = repository.GetConnectionProvider.BeginTransaction())
            {
                repository.Update().Set(c => c.Task, "A01").Where(c => c.Id == 1).Go();// A1
                repository.Update().Set(c => c.Task, "B01").Where(c => c.Id == 2).Go();// B2
                tranc.Rollback();
            }
           foreach (var item in results.Go())
            {
                Console.WriteLine($"{item.Id}\t {item.Task} ");
            }
            Console.WriteLine(results.Sql());
          }

(三)、增加生成  @ 参数 的语句支持

返回形如下列SQL语句:

var repository = MsSqlRepoFactory.Create<ToDo>();

var results = repository.Query().Where(c => c.Id == 6).Go().FirstOrDefault();

Console.WriteLine(resultinsert.ParamSql());

1、 INSERT  ToDo ( CreatedDate , IsCompleted , Task )

VALUES(@CreatedDate,@IsCompleted,@Task);

var resultinsert = repository.Update().For(results);

 Console.WriteLine(resultinsert.ParamSql());

2、 UPDATE   ToDo

SET CreatedDate  = @CreatedDate, IsCompleted  = @IsCompleted, Task  = @Task

WHERE Id  = @Id;

以解决储如Dapper等ORM工具需要参数类型字符串需求

SqlRepoEx中是可以与 Dapper 同时并存,意味着初始化SqlRepoEx后,

1、可以直接从 SqlRepoEx 中操作返回结果;

2、可以通过 SqlRepoEx 来生成SQL语句,另外Dapper 主要是基于SqlMapper ,SqlMapper中定义了基于 IDbConnection 接口的操作,你可以通过SqlRepoEx 的 IConnectionProvider 接口来获取一个 DbConnection 有两种方法

     (1)、 var connectionProvider = new AppConfigFirstConnectionProvider();

           IDbConnection dbConnection = connectionProvider.GetDbConnection;

     (2)、 var repository = MsSqlRepoFactory.Create<ToDo>();

          IDbConnection dbConnection = repository.GetConnectionProvider.GetDbConnection;

二、注意事项

1、如果返回的SQL中没有字段名返回,如  insert Doto() values()  ,这种情况,当前使用了WritablePropertyMatcher 属性读写器,而DTO类又未设置特性

 你可以

 (1)、增加相应字段特性

        [SqlRepoDbField]
        public bool IsCompleted { get; set; }

        [SqlRepoDbField]
        public string Task { get; set; }

 (2)、使用 SimpleWritablePropertyMatcher属性读写器

        MsSqlRepoFactory.UseWritablePropertyMatcher(new SimpleWritablePropertyMatcher());

 var connectionProvider = new AppConfigFirstConnectionProvider();
            IDbConnection dbConnection = connectionProvider.GetDbConnection;
            MsSqlRepoFactory.UseConnectionProvider(connectionProvider);
            MsSqlRepoFactory.UseWritablePropertyMatcher(new WritablePropertyMatcher());
            MsSqlRepoFactory.UseStatementTransactionExecutor();

2、事务支持,事务支持需使用MsSqlRepoFactory.UseStatementTransactionExecutor();,如果是自定义的读写器,一定不在内部关闭 connection;

 

完整的演示代码见:https://gitee.com/azthinker/SqlRepoEx2.0Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值