zoukankan      html  css  js  c++  java
  • ADO.NET实体数据模型使用探索1

    今天研究了下ADO.NET实体数据模型,想写个关于两张有外键关系的增改删查,以此来稍增加点难度。

    编程环境:vs2010+sql2005

    1.在SQL2005下建立三张表:学生信息表Student(Snno,Sname,Age),课程信息表Course(Cno,Cname),选课表SC(Sno,Cno)(Sno,Cno分别为外键)除AGE为整形外,其他都为字符串型。

    2.打开VS2010,建立c#控制台程序,新建---新建项---ADO.NET实体数据模型,文件名默认为Model1.edmx---确定---选择本机数据库----选择港建立的数据库的3张表,OK。

    EDMX图形:

    可能新同学觉得奇怪,这么没有SC表了?!不过多了导航的东西。其实SC表因为只是Student和Course的外键,所以可以通过Stu对象找到对应的Course对象。(源代码见Model1.Designer.cs)。具体原理各位百度下,这里就不细说了。

    直接上控制台程序内部的Main()方法:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace System_EntityObjectTest
      7 {
      8     class Program
      9     {
     10         static void Main(string[] args)
     11         {
     12             testEntities db = new testEntities();
     13 
     14             #region 查询所有学生信息记录并输出
     15             //查询所有学生信息记录并输出,支持动态延迟查询
     16             var query = db.Stu;
     17             ShowStu(query);
     18             #endregion
     19 
     20             #region 增加一条学生记录及该生的选课记录
     21             //增加一条学生记录及该生的选课记录
     22             Stu stu1 = new Stu() { Sno = "001", Sname = "niulinhua", Age = 21 };  //亦可Stu s = db.Stu.CreateObject();之后再对象属性赋值
     23             stu1.Course.Add(new Course() { Cno = "001", Cname = "math" });
     24             db.Stu.AddObject(stu1);
     25             db.SaveChanges();
     26             ShowStu(query);
     27             #endregion
     28 
     29             #region 查询学号001的学生的所有选课
     30             //查询学号001的学生的所有选课
     31             var stu2 = db.Stu.Where(s => s.Sno == "001").SingleOrDefault();
     32             foreach (var item in stu2.Course)
     33             {
     34                 Console.WriteLine(stu2.Sname + "," + item.Cname);
     35             }
     36             Console.WriteLine();
     37             #endregion
     38             
     39             #region 修改学生年龄,并查看对象状态
     40             //修改学生年龄,并查看对象状态
     41             var stu3 = db.Stu.Where(s => s.Sno == "001").First();
     42             Console.WriteLine(stu3.EntityState.ToString());
     43             stu1.Age = -1;
     44             Console.WriteLine(stu3.EntityState.ToString());
     45             db.SaveChanges();
     46             Console.WriteLine(stu3.EntityState.ToString());
     47             ShowStu(query);
     48             #endregion
     49 
     50             #region 删除学号001的学生所有记录,包括选课信息
     51             //删除学号001的学生所有记录,包括选课信息
     52             var stu4 = db.Stu.Where(s => s.Sno == "001").SingleOrDefault();
     53             //1.删除该生所有选课信息
     54             //EF实际无SC表,处理为删除实体关系
     55             stu4.Course.Clear();
     56             //或者手动逐个清楚
     57             //for (int i = 0; i < stu3.Course.Count; i++)
     58             //{
     59             //    stu3.Course.Remove(stu3.Course.ElementAt(i));
     60             //}
     61             //不能用foreach(),因为它不允许集合更改
     62             //foreach (var item in stu.Course)
     63             //{
     64             //    stu.Course.Remove(item);
     65             //}
     66             //2.删除学生个人信息
     67             db.Stu.DeleteObject(stu3);
     68             db.SaveChanges();
     69             ShowStu(query);
     70             #endregion
     71 
     89             Console.Read();
     90         }
     91 
     92         private static void ShowStu(System.Data.Objects.ObjectSet<Stu> query)
     93         {
     94             foreach (var item in query)
     95             {
     96                 Console.WriteLine(item.Sno + "    " + item.Sname + "  " + item.Age);
     97             }
     98             Console.WriteLine();
     99         }
    100     }
    101 }

    代码有点乱,在下水平有限,不过各位应该还是能读懂的。

    这段代码操作了三张表(S,C,SC表),并建立了相关联系。对有外键的表操作时要小心,否则会引发数据库错误.总之,各位理解下便知。

    好了,对这三张表的增改删查到此OK。

    另外推荐各有用的的数据库小工具:sql server profile,SQL2005自带(工具---sql server profile),可以方便的看到连接到此数据库的信息,包括连接名,时间,命令等,可以用来观察LINQ或EF等最终生成的SQL语句,也有利于优化。

  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/nlh774/p/3448206.html
Copyright © 2011-2022 走看看