zoukankan      html  css  js  c++  java
  • Restful.Data v2.0发布,谢谢你们的支持和鼓励

    v1.0发布后,承蒙各位博友们的热心关注,也给我不少意见和建议,在此我真诚的感谢 @冰麟轻武 等朋友,你们的支持和鼓励,是这个开源项目最大的推动力。

    v2.0在除了细枝末节外,在功能上主要做了一下更新:

    1、实体类不再需要自己跟踪属性值变化:

        [Serializable]
        public class Person
        {
            [PrimaryKey, AutoIncrease]
            public virtual int Id { get; set; }
    
            public virtual string Name { get; set; }
    
            public virtual int? Age { get; set; }
    
            public virtual decimal? Money { get; set; }
    
            public virtual DateTime CreateTime { get; set; }
    
            public virtual bool IsActive { get; set; }
        }

    属性需要限定为 virtual ,以便生成代理。

    如何新增数据:

    [Test()]
            public void Insert()
            {
                // 新增时,对象务必使用 EntityProxyGenerator 创建实体代理,否则无法跟踪属性变化
                var person = EntityProxyGenerator.CreateProxy<Person>();
    
                person.Name = "test";
                //person.Age = 20;
                person.Money = 100;
                person.CreateTime = DateTime.Now;
                person.IsActive = false;
    
                using (ISession session = SessionFactory.CreateDefaultSession())
                {
                    int i = session.Insert(person);
    
                    // 输出生成的SQL语句
                    Console.WriteLine(SqlCmd.Current.Sql);
    
                    int id = session.GetIndentifer<int>();
    
                    Assert.AreEqual(1, i);
                    Assert.Greater(id, 0);
                }
            }

    如何更新数据:

    [Test()]
            public void Update()
            {
                var person = EntityProxyGenerator.CreateProxy<Person>();
    
                person.Name = "test";
                person.Age = 20;
                person.Money = 100;
                person.CreateTime = DateTime.Now;
                person.IsActive = true;
    
                using (ISession session = SessionFactory.CreateDefaultSession())
                {
                    int i = session.Insert(person);
    
                    int id = session.GetIndentifer<int>();
    
                    // Find 方法返回的对象都是原始对象而非代理对象
                    person = session.Find<Person>().Where(s => s.Id == id).Single();
    
                    Console.WriteLine(SqlCmd.Current.Sql);
    
                    // 根据原始对象创建代理对象
                    person = person.ToEntityProxy<Person>();
    
                    person.Name = "test01";
                    person.Age = 31;
                    person.Money = 200;
    i
    = session.Update(person); Console.WriteLine(SqlCmd.Current.Sql); person = session.Find<Person>().Where(s => s.Id == id).Single(); Console.WriteLine(SqlCmd.Current.Sql); Assert.AreEqual(1, i); Assert.AreEqual("test01", person.Name); Assert.AreEqual(31, person.Age.Value); Assert.AreEqual(200, person.Money.Value); person = EntityProxyGenerator.CreateProxy<Person>(); person.Name = "test"; person.Age = 20; person.Money = 100; person.CreateTime = DateTime.Now; person.IsActive = true; i = session.Update<Person>().Set(person).Where(s => s.Id == id).Execute(); Console.WriteLine(SqlCmd.Current.Sql); Assert.AreEqual(1, i); Assert.AreEqual("test", person.Name); Assert.AreEqual(20, person.Age.Value); Assert.AreEqual(100, person.Money.Value); Assert.AreEqual(true, person.IsActive); } }

    2、SQL语句中的参数:

    你可以这样写:

    using (ISession session = SessionFactory.CreateDefaultSession())
                {
                    string sql = "select count(*) from Person where Id = ? and CreateTime < ?";
    
                    int count = session.ExecuteScalar<int>(sql, 500, DateTime.Now);
    
                    Assert.AreEqual(1, count);
                }

    在任何数据库环境下,所有参数均使用问号替代参数名,但需保证问号的数量与传入的参数值数量一致,并顺序一致。

    如何需要进行条件拼接,可以这样写:

    StringBuilder builder = new StringBuilder();
    
                    builder.Append("select * from Person where ");
    
                    IList<object> parameters = new List<object>();
    
                    if (model.Id != 0)
                    {
                        builder.Append("Id = ?, ");
                        parameters.Add(model.Id);
                    }
    
                    if (string.IsNullOrEmpty(model.Name) == false)
                    {
                        builder.Append("Name = ?, ");
                        parameters.Add(model.Name);
                    }
    
                    return session.ExecuteDataTable(builder.ToString(), parameters);

    OK,就介绍这两点,其他功能请自己摸索。

    后期将陆续发布oracle与sqlserver的provider,功能上将不再做大的更新和变动。

    如有不明白的,请参见我的上两篇帖子。

    我马上也要专心去找工作养家糊口了,在家呆了快一个月了,各位博友有好的工作机会帮忙推荐一下。

  • 相关阅读:
    golang 使用错误总结
    golang 跨平台交叉编译
    golang redis 第三方包
    golang 浮点型 与其他数值类型计算
    golang 更友好的格式化输出
    golang 指定长度 随机数 & 随机字符串
    go语言中int和byte转换方式
    基础知识
    golang bytes 包 详解
    golang 解析 ini 文件 中文文档
  • 原文地址:https://www.cnblogs.com/zhaoguihua/p/restful-data-03.html
Copyright © 2011-2022 走看看