ADO.NET实体数据模型使用探索1
2013-11-28 17:44
537 查看
今天研究了下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()方法:
代码有点乱,在下水平有限,不过各位应该还是能读懂的。
这段代码操作了三张表(S,C,SC表),并建立了相关联系。对有外键的表操作时要小心,否则会引发数据库错误.总之,各位理解下便知。
好了,对这三张表的增改删查到此OK。
另外推荐各有用的的数据库小工具:sql server profile,SQL2005自带(工具---sql server profile),可以方便的看到连接到此数据库的信息,包括连接名,时间,命令等,可以用来观察LINQ或EF等最终生成的SQL语句,也有利于优化。
编程环境: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()方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace System_EntityObjectTest { class Program { static void Main(string[] args) { testEntities db = new testEntities(); #region 查询所有学生信息记录并输出 //查询所有学生信息记录并输出,支持动态延迟查询 var query = db.Stu; ShowStu(query); #endregion #region 增加一条学生记录及该生的选课记录 //增加一条学生记录及该生的选课记录 Stu stu1 = new Stu() { Sno = "001", Sname = "niulinhua", Age = 21 }; //亦可Stu s = db.Stu.CreateObject();之后再对象属性赋值 stu1.Course.Add(new Course() { Cno = "001", Cname = "math" }); db.Stu.AddObject(stu1); db.SaveChanges(); ShowStu(query); #endregion #region 查询学号001的学生的所有选课 //查询学号001的学生的所有选课 var stu2 = db.Stu.Where(s => s.Sno == "001").SingleOrDefault(); foreach (var item in stu2.Course) { Console.WriteLine(stu2.Sname + "," + item.Cname); } Console.WriteLine(); #endregion #region 修改学生年龄,并查看对象状态 //修改学生年龄,并查看对象状态 var stu3 = db.Stu.Where(s => s.Sno == "001").First(); Console.WriteLine(stu3.EntityState.ToString()); stu1.Age = -1; Console.WriteLine(stu3.EntityState.ToString()); db.SaveChanges(); Console.WriteLine(stu3.EntityState.ToString()); ShowStu(query); #endregion #region 删除学号001的学生所有记录,包括选课信息 //删除学号001的学生所有记录,包括选课信息 var stu4 = db.Stu.Where(s => s.Sno == "001").SingleOrDefault(); //1.删除该生所有选课信息 //EF实际无SC表,处理为删除实体关系 stu4.Course.Clear(); //或者手动逐个清楚 //for (int i = 0; i < stu3.Course.Count; i++) //{ // stu3.Course.Remove(stu3.Course.ElementAt(i)); //} //不能用foreach(),因为它不允许集合更改 //foreach (var item in stu.Course) //{ // stu.Course.Remove(item); //} //2.删除学生个人信息 db.Stu.DeleteObject(stu3); db.SaveChanges(); ShowStu(query); #endregion Console.Read(); } private static void ShowStu(System.Data.Objects.ObjectSet<Stu> query) { foreach (var item in query) { Console.WriteLine(item.Sno + " " + item.Sname + " " + item.Age); } Console.WriteLine(); } } }
代码有点乱,在下水平有限,不过各位应该还是能读懂的。
这段代码操作了三张表(S,C,SC表),并建立了相关联系。对有外键的表操作时要小心,否则会引发数据库错误.总之,各位理解下便知。
好了,对这三张表的增改删查到此OK。
另外推荐各有用的的数据库小工具:sql server profile,SQL2005自带(工具---sql server profile),可以方便的看到连接到此数据库的信息,包括连接名,时间,命令等,可以用来观察LINQ或EF等最终生成的SQL语句,也有利于优化。
相关文章推荐
- 发布 asp.net网站 到本地IIS
- DataGridView UserDeletingRow事件 提示控制
- 更完美的log
- 更新linux gcc版本到gcc 4.4.2之三
- OpenCV函数cvWaitKey(k)简介
- Eclipse开发初阶之Eclipse安装
- C#,将IrisSkin2皮肤完全整合到exe中
- Sqoop安装配置与从mysql中导入数据到hbase
- 编译飞凌ok335D开发板内核时出现drivers/mfd/ezx-pcap.c:205:2: error: implicit declaration of function 'irq_to_gpio
- typedef与define的区别
- 《Linux内核精髓:精通Linux内核必会的75个绝技》目录
- 快递单号生成软件
- 处理换行
- HBase在单Column和多Column情况下批量Put的性能对比分析
- RedHat5.5 升级安装GCC-4.6.1详细教程之二
- C# API接口使用样例
- clock latency
- Supervisord中控制upstart jobs
- [Err] 1005 - Can't create table 'xx' (errno: 150) 解决方案
- linux下ln命令学习