public void AddTotest_main(test_main test_main)
 {
     base.AddObject("test_main", test_main);
 }
 public static test_main Createtest_main(int id)
 {
     test_main test_main = new test_main();
     test_main.id = id;
     return test_main;
 }
Beispiel #3
0
        /// <summary>
        /// 基本的 查询 / 插入 / 更新 / 删除 处理.
        /// </summary>
        private static void BaseTest()
        {
            TestEntities context = new TestEntities();
            // 单表查询
            var query =
                from testMain in context.test_main
                select testMain;

            foreach (test_main main in query)
            {
                Console.WriteLine("Main[{0}, {1}]", main.id, main.value);
            }

            // 关联查询
            var query2 =
                from testSub in context.test_sub
                where testSub.test_main.value == "ONE"
                select testSub;

            foreach (test_sub sub in query2)
            {
                Console.WriteLine("Sub[{0}, {1}]", sub.id, sub.value);
            }

            // 插入.
            test_main main3 = new test_main();

            main3.id    = 3;
            main3.value = "Three";
            context.AddObject("test_main", main3);
            context.SaveChanges();

            Console.WriteLine("INSERT FINISH!");
            Console.ReadLine();

            // 更新.
            var newTestMain =
                (from testMain in context.test_main
                 where testMain.id == 3
                 select testMain).First();

            newTestMain.value = "Three3";
            context.SaveChanges();

            Console.WriteLine("UPDATE FINISH!");
            Console.ReadLine();

            // 单表查询 TOP 2
            var queryTop2 =
                (from testMain in context.test_main
                 orderby testMain.id descending
                 select testMain).Take(2);

            foreach (test_main main in queryTop2)
            {
                Console.WriteLine("Main[{0}, {1}]", main.id, main.value);
            }

            // 删除.
            context.DeleteObject(newTestMain);
            context.SaveChanges();

            Console.WriteLine("DELETE FINISH!");
            Console.ReadLine();
        }
 public void AddTotest_main(test_main test_main)
 {
     base.AddObject("test_main", test_main);
 }
Beispiel #5
0
        /// <summary>
        /// 应用对已分离对象的更改
        /// </summary>
        private static void ApplyPropertyChangesTest()
        {
            Console.WriteLine("========== 应用对已分离对象的更改 ==========");

            TestEntities context = new TestEntities();

            // 单表查询
            test_main mainData = context.test_main.FirstOrDefault(p => p.id == 2);

            Console.WriteLine("Init:  Main[{0}, {1}]", mainData.id, mainData.value);



            // 分离对象
            // 在分离对象时,应考虑以下注意事项:
            // Detach 只影响传递给该方法的特定对象。如果要分离的对象在对象上下文中具有相关对象,则那些相关对象不会分离。
            // 不会为已分离的对象维护关系信息。
            // 分离对象后,不会维护对象状态信息。这包括所跟踪的更改和临时键值。
            // 分离对象不影响数据存储区中的数据。
            // 在分离操作过程中不会强制执行级联删除指令和引用约束。
            // 在考虑分离对象的优点时,应该注意执行该操作所需的处理。当用户数据的范围已经更改(例如,用一组不同的数据显示新窗体)时,应该考虑创建一个新的 ObjectContext 实例,而不只是从现有 ObjectContext 分离对象。

            context.Detach(mainData);


            // 上面的代码, 可以理解为:
            // 首先,从数据库检索出数据
            // 然后,分离对象
            // 分离后的对象, Context 不再管理了
            // 主要应用于 服务器端, 查询数据以后, 不维持数据的变更管理
            // 把数据 发送给客户端。


            // 而客户端 拿到的数据, 相当于是  与 数据库无关的
            // 因为对 “分离后的数据” 做任意修改
            // 简单调用  SaveChanges 将不会更新数据库表中的数据。

            // 分离对象的修改.
            mainData.value = "TwoTwo";

            // 保持数据更改.
            context.SaveChanges();

            // 再次查询, 数据没有发生任何变化.
            test_main mainData2 = context.test_main.FirstOrDefault(p => p.id == 2);

            Console.WriteLine("Detach and Save Main[{0}, {1}]", mainData2.id, mainData2.value);
            context.Detach(mainData2);



            // 下面是模拟 服务器端, 接收到一个 客户端的 更新请求时, 如何处理的例子.

            // 主键
            EntityKey key;
            // 旧数据.
            object originalItem;

            using (TestEntities updateContext = new TestEntities())
            {
                try
                {
                    // 根据 修改后的数据, 获取其主键 (注意: 更新处理是只改数据,不修改主键的)
                    key = updateContext.CreateEntityKey("test_main", mainData);

                    // 尝试通过主键, 获取数据库中的数据.
                    if (updateContext.TryGetObjectByKey(key, out originalItem))
                    {
                        // 调用 ApplyPropertyChanges 方法,来更新数据.
                        updateContext.ApplyPropertyChanges(
                            key.EntitySetName, mainData);
                    }

                    updateContext.SaveChanges();
                }
                catch (InvalidOperationException ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }



            // 再次查询, 数据发生变化.
            mainData2 = context.test_main.FirstOrDefault(p => p.id == 2);
            Console.WriteLine("ApplyPropertyChanges and Save  Main[{0}, {1}]", mainData2.id, mainData2.value);

            // 最后改回原始情况
            mainData2.value = "TWO";
            context.SaveChanges();
        }