zoukankan      html  css  js  c++  java
  • LinqToSql ,EF:外键实体的CRD

         接触LinqTosql是很久的事情了,之前一直在拼接字符串,所以一开始就很喜欢这种ORM的方式,强类型用的爽啊,最近开始

    改为学习ADO.NET 实体框架了:),概念上的东西网上都很多,当我想实现一个简单的外键表操作时,却没有一个较好的例子,

    经过一段摸索后,将最简单的情形给贴出来。

         本文用这2种方式通过一个简单的外键关系来演示Insert,Update,Delete操作

         DB中建立2张表,这里只考虑1对多的关系:

            image

          

      LinqToSql的方式:

          生成的TestDB.dbml:

         image

         Insert:

            using(TestDBDataContext db=new TestDBDataContext())
    
            {
    
                Depatment depatment = new Depatment() {DeptName = "开发部"};
    
                Employee employee = new Employee()
    
                                        {
    
                                            EmpName = "Ringgo.Yao",
    
                                            Depatment = depatment
    
                                        };
    
                db.Depatment.InsertOnSubmit(depatment);
    
                db.SubmitChanges();
    
            }

         当提交Department时,会自动提交Employee      

        Update:

            using (TestDBDataContext db = new TestDBDataContext())
    
            {
    
                Depatment depatment = db.Depatment.Where(i => i.DeptId ==2).First();
    
                depatment.DeptName = "研发部";
    
                Employee employee = new Employee()
    
                {
    
                    EmpName = "Ringgo.Yao",
    
                    Depatment = depatment
    
                };            
    
                db.SubmitChanges();
    
            }

           这里修改Department记录的同时添加了一条Employee记录

         Delete:

           using (TestDBDataContext db = new TestDBDataContext())
    
            {
    
              Depatment depatment=db.Depatment.Where(i => i.DeptId == 3).First();
    
              var employees=db.Employee.Where(i => i.DeptId == 3).ToList();  
    
              db.Employee.DeleteAllOnSubmit(employees);
    
              db.Depatment.DeleteOnSubmit(depatment);
    
              db.SubmitChanges();
    
            }

            删除的时候要先删除Employee,再删除Department

         ADO.NET Entity Framework的方式:

          生成的TestDB.edmx:

           image

           

         因为代码看起来似乎区别不大,所以就不进行说明了

         Insert:

            using(TestDBEntities db=new TestDBEntities())
    
            {
    
                Depatment depatment = new Depatment() {DeptName = "开发部"};
    
                Employee employee = new Employee() {EmpName = "Ringgo.Yao"};
    
                depatment.Employee.Add(employee);
    
                db.Depatment.AddObject(depatment);
    
                db.SaveChanges();
    
            }

        

         Update:

            using (TestDBEntities db = new TestDBEntities())
    
            {
    
                var dept = db.Depatment.Where(i => i.DeptId == 1).First();
    
                dept.DeptName = "研发部";
    
                Employee employee = new Employee() {EmpName = "White"};
    
                dept.Employee.Add(employee);
    
                db.SaveChanges();
    
            }
      Delete:
           using (TestDBEntities db = new TestDBEntities())
    
            {
    
                var dept = db.Depatment.Where(i => i.DeptId == 1).First();
    
                foreach (var emp in dept.Employee.ToList())
    
                {                
    
                    dept.Employee.Remove(emp);
    
                    db.Employee.DeleteObject(emp);
    
                }
    
                db.Depatment.DeleteObject(dept);
    
                db.SaveChanges();
    
            }
      上面简单的将一对多情形的Insert,Update,Delete操作演示了一下,这些算是基础的知识了,希望对刚接触ADO.NET实体框架的朋友有点帮助。
      
  • 相关阅读:
    【译文】不是所有的 bug 都值得修复的
    11月第5周业务风控关注|重磅!瓜子二手车“遥遥领先”被罚天价1250万
    AutoCAD .NET二次开发(四)
    AutoCAD .NET二次开发(三)
    ArcGIS10.2下调试10.1的程序
    再遇1402,注册表权限问题
    ArcGIS Add-in——自动保存编辑
    只打开一个子窗体
    获取编辑器两种方法
    Adobe Acrobat Pro 11安装激活
  • 原文地址:https://www.cnblogs.com/626498301/p/1914865.html
Copyright © 2011-2022 走看看