Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            SessionFactories.Register <MySqlSessionFactory>();

            string sql01 = "select * from Person where Id = ? and Name = ?";
            string sql02 = "select * from Person where Id = ? and Name = ?;";

            var parts01 = sql01.Split('?');
            var parts02 = sql02.Split('?');

            var person = new Person();

            person.Name       = "test";
            person.Money      = 100;
            person.CreateTime = DateTime.Now;
            person.IsActive   = false;


            Stopwatch watch = new Stopwatch();

            for (int i = 0; i < 10; i++)
            {
                watch.Start();

                var handler = DynamicHelper.CreateDynamicPropertySetHandler(person.GetType().GetProperty("Age"));

                handler(person, 20);

                var proxy = EntityProxyGenerator.CreateProxy <Person>(person);

                watch.Stop();

                Console.WriteLine(watch.Elapsed);

                watch.Reset();
            }



//            using (ISession session = SessionFactory.CreateDefaultSession())
//            {
//                int i = session.Insert(person);
//
//                Console.WriteLine(SqlCmd.Current.Sql);
//
//                int id = session.GetIndentifer<int>();
//            }

            Console.ReadLine();
        }
Beispiel #3
0
        public void Delete()
        {
            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>();

                person = session.Find <Person>().Where(s => s.Id == id).Single();

                i = session.Delete(person);

                Console.WriteLine(SqlCmd.Current.Sql);

                var queryable = session.Find <Person>().Where(s => s.Id == id);

                Assert.AreEqual(1, i);
                Assert.AreEqual(0, queryable.Count());

                person = EntityProxyGenerator.CreateProxy <Person>();

                person.Name       = "test";
                person.Age        = 20;
                person.Money      = 100;
                person.CreateTime = DateTime.Now;
                person.IsActive   = true;

                i = session.Insert(person);

                id = session.GetIndentifer <int>();

                person = session.Find <Person>().Where(s => s.Id == id).Single();

                i = session.Delete <Person>().Where(s => s.Id == id).Execute();

                Console.WriteLine(SqlCmd.Current.Sql);

                Assert.AreEqual(1, i);
                Assert.AreEqual(0, queryable.Count());
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
 /// <summary>
 /// 将对象转换为实体代理
 /// </summary>
 /// <returns>实体代理</returns>
 /// <param name="object">对象</param>
 /// <typeparam name="T"></typeparam>
 public static T ToEntityProxy <T>(this T @object)
 {
     return(EntityProxyGenerator.CreateProxy <T>(@object));
 }
Beispiel #6
0
 /// <summary>
 /// 将对象转换为实体代理
 /// </summary>
 /// <returns>实体代理</returns>
 /// <param name="object">对象</param>
 public static object ToEntityProxy(this object @object)
 {
     return(EntityProxyGenerator.CreateProxy(@object));
 }
Beispiel #7
0
        public void Find()
        {
            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())
            {
                session.Insert(person);

                int id = session.GetIndentifer <int>();

                var queryable = session.Find <Person>().Where(s => s.Id == id);

                // 测试 Single 函数
                person = queryable.Single();

                Console.WriteLine(SqlCmd.Current.Sql);

                Assert.AreEqual("test", person.Name);
                Assert.AreEqual(20, person.Age.Value);
                Assert.AreEqual(100, person.Money.Value);
                Assert.AreEqual(true, person.IsActive);

                // 测试 SingleOrDefault 函数
                person = queryable.SingleOrDefault();

                Console.WriteLine(SqlCmd.Current.Sql);

                Assert.AreEqual("test", person.Name);
                Assert.AreEqual(20, person.Age.Value);
                Assert.AreEqual(100, person.Money.Value);
                Assert.AreEqual(true, person.IsActive);

                // 测试 First 函数
                person = queryable.First();

                Console.WriteLine(SqlCmd.Current.Sql);

                Assert.AreEqual("test", person.Name);
                Assert.AreEqual(20, person.Age.Value);
                Assert.AreEqual(100, person.Money.Value);
                Assert.AreEqual(true, person.IsActive);

                // 测试 FirstOrDefault 函数
                person = queryable.FirstOrDefault();

                Console.WriteLine(SqlCmd.Current.Sql);

                Assert.AreEqual("test", person.Name);
                Assert.AreEqual(20, person.Age.Value);
                Assert.AreEqual(100, person.Money.Value);
                Assert.AreEqual(true, person.IsActive);

                // 测试 Count 函数
                Assert.AreEqual(1, queryable.Count());

                Console.WriteLine(SqlCmd.Current.Sql);

                // 测试 ToList 函数
                var list = queryable.ToList();

                Console.WriteLine(SqlCmd.Current.Sql);

                Assert.AreEqual(1, list.Count());

                // 测试包含多个 Where 条件
                queryable = session.Find <Person>()
                            .Where(s => s.Id == id)
                            .Where(s => s.Name.Contains("test"))
                            .Where(s => s.Age == 20 && s.IsActive == true)
                            .Skip(0).Take(1);

                Assert.AreEqual(1, queryable.Count());

                Console.WriteLine(SqlCmd.Current.Sql);
            }
        }