zoukankan      html  css  js  c++  java
  • ALinq 入门学习(五)插入数据

    Linq to SQL 的插入相对于ADO.NEt 来说是少了很多工作。ALinq 的插入和Linq to SQL 也非常相似。这几篇文章可能对于有些人来说是很肤浅的,如果懂Linq to SQL 的同仁来说,这些东西就是积分中的事情,因为这些东西基本一样,只需要注意一些小的细节即可。声明一次,如果有人觉得这文章很垃圾,请不要恶言相对,不留言即可。谢谢!!。希望博客园的还是以技术交流为主,不要有过多的口舌之争!!

    1. 插入单行数据

      数据库表在实体设计器中会生成对应的实体对象,我们可以通过这些对象来操作代理操作数据库。

    如果需要插入一行数据:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库 , InsertOnSubmit()方法先将数据写入内存中,然后有SubmitChanges()统一提交持久化到数据库中。

    ALinq 插入一行数据
     1 /// <summary>
     2         /// 插入单个实体对象
     3         /// </summary>
     4         public void FunctionInsEntity()
     5         {
     6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
     7             TabRole role = new TabRole();
     8             role.Ext1 = "";
     9             role.Ext2 = "";
    10             role.Ext3 = "";
    11             role.Ext4 = "";
    12             role.Ext5 = "";
    13             role.ISFobid = 0;
    14             role.Remark = "查看权限";
    15             role.RoleName = "查看权限";
    16             context.TabRole.InsertOnSubmit(role);
    17 
    18             //context.GetTable<TabRole>().InsertOnSubmit(role);
    19             context.SubmitChanges();
    20         }

    上面代码中有一行被注释了的代码,这句代码也可以插入一个实体对象。当然如果两个同时使用,只能提交一行数据到数据库中。

    2. 插入多行数据

    有时候我们插入数据不仅仅是插入一行数据,如果在对同一个表插入数据的时候有多行数据插入,我们每连接一次数据库然后插入一行数据,这样对于性能是一个极大的损耗,上面的提到过了, InsertOnSubmit() 可以先将数据存储到内存中 然后统一提交到数据。

    ALinq 插入多行数据
     1 /// <summary>
     2         /// 插入多个实体对象
     3         /// </summary>
     4         public void FunctionInsmanyEntity()
     5         {
     6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
     7             IList<TabRole> list = new List<TabRole>();
     8             for (int i = 0; i < 5; i++)
     9             {
    10                 TabRole role = new TabRole();
    11                 role.Ext1 = (i + 1).ToString();
    12                 role.Ext2 = (i + 2).ToString();
    13                 role.Ext3 = (i + 3).ToString();
    14                 role.Ext4 = (i + 4).ToString();
    15                 role.Ext5 = (i + 5).ToString();
    16                 role.ISFobid = i % 2 == 0 ? 0 : 1;
    17                 role.Remark = "查看权限" + i;
    18                 role.RoleName = "查看权限" + i;
    19                 list.Add(role);
    20             }
    21             context.TabRole.InsertAllOnSubmit(list);
    22             context.SubmitChanges();
    23         }

    这个方法中 创建了5个对象,使用InsertAllOnSubmit() 方法将5个对象同时保存到内存中,这个方式和上面InsertOnSubmit()方法作用相同,只是保存的是一个集合。最后也是使用SubmitChanges()提交到数据库。

    3.级联插入数据

     在数据库中存在两个主外键关系的表,我们使用实体设计器建立实体关系,并生产相应的实体对象。我们需要的操作是,当插入子表数据的时候,同时指定主键表的实体,而这个实体本身也是要新建的。也就是说要先生成一个逐渐表ID,然后再插入到子表中(外见表).这个操作在Linq to SQL 中是可以行的,但是在ALinq 中好像不行。这个问题可能是我本人还没有了解清楚,不过这里先介绍一下ALinq 中的用法,之后我去找ALinq 的作者了解一下情况然后补充。

    Linq to SQL 级联插入数据
     1 /// <summary>
     2         /// 插入有关联关系的实体
     3         /// </summary>
     4         public void FunctionInsRelaEntity()
     5         {
     6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
     7             TabRole role = new TabRole();
     8             role.Ext1 = "";
     9             role.Ext2 = "";
    10             role.Ext3 = "";
    11             role.Ext4 = "";
    12             role.Ext5 = "";
    13             role.ISFobid = 0;
    14             role.Remark = "级联关系";
    15             role.RoleName = "级联关系";
    16 
    17             TabUser user = new TabUser
    18             {
    19                 Address = "上海",
    20                 Age = 23,
    21                 Birthday = DateTime.Now,
    22                 CardID = "421022195905303919",
    23                 Descript = "",
    24                 Ext1 = "",
    25                 Ext2 = "",
    26                 Ext3 = "",
    27                 Ext4 = "",
    28                 Ext5 = "",
    29                 ISFobid = 0,
    30                 RoleId = 1,
    31                 IsMarried = 0,
    32                 PassWord = "sdfsdf",
    33                 Remark = "备注",
    34                 Sex = 0,
    35                 TabRole = role,
    36                 UserName = "sdfsdf"
    37             };
    38             context.TabUser.InsertOnSubmit(user);
    39             context.SubmitChanges();
    40         }
    41 

    4.动态操作数据

    在java Hibernate 中有个方法很不错,那就是当数据存在主键值对应的数据时就修改,如果没有就增加一行数据。Linq to SQL 也支持这个操作,但是ALinq 又好像不支持,说到这里感觉ALinq 还是有很多弊端的,不过这些都不影响我们使用,一般使用这种操作都很少的,我们可以使用其他的方式来替代。下面看看Linq to SQL 中的动态修改数据方法。

    Linq to SQL 动态修改数据
     1 /// <summary>
     2         /// 重写数据
     3         /// </summary>
     4         public void FunctionOverrideData()
     5         {
     6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
     7             TabRole role = new TabRole
     8             {
     9                 Ext1 = "ddd",
    10                 Ext2 = "ddd",
    11                 Ext3 = "ddd",
    12                 Ext4 = "ddd",
    13                 Ext5 = "ddd",
    14                 ISFobid = 0,
    15                 Remark = "级联关系",
    16                 RoleName = "级联关系",
    17                 Id = 2
    18             };
    19             context.TabRole.InsertOnSubmit(role);
    20             context.SubmitChanges();
    21         }
  • 相关阅读:
    Python之路第六天,进阶-算法
    Python之路第八天,进阶-设计模式
    Python之路第八天,基础(10)-异常处理
    Python之路第八天,基础(9)-面向对象(下)
    Python之路第七天,基础(9)-面向对象(上)
    Python之路第六天,基础(7)-正则表达式(re)
    Java开发常用代码
    SQL用replace替换文本部分内容
    tomcat多域名配置
    Servlet/jsp 中 获取页面所有传递参数
  • 原文地址:https://www.cnblogs.com/qingyuan/p/1729782.html
Copyright © 2011-2022 走看看