ADO.NET实体数据模型使用探索1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实体数据模型使⽤探索1
今天研究了下实体数据模型,想写个关于两张有外键关系的增改删查,以此来稍增加点难度。
编程环境:vs2010+sql2005
1.在SQL2005下建⽴三张表:学⽣信息表Student(Snno,Sname,Age),课程信息表Course(Cno,Cname),选课表SC(Sno,Cno)(Sno,Cno分别为外键)除AGE为整形外,其他都为字符串型。
2.打开VS2010,建⽴c#控制台程序,新建---新建项实体数据模型,⽂件名默认为Model1.edmx---确定---选择本机数据库----选择港建⽴的数据库的3张表,OK。
EDMX图形:
可能新同学觉得奇怪,这么没有SC表了?!不过多了导航的东西。
其实SC表因为只是Student和Course的外键,所以可以通过Stu对象找到对应的Course对象。
(源代码见Model1.Designer.cs)。
具体原理各位百度下,这⾥就不细说了。
直接上控制台程序内部的Main()⽅法:
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6namespace System_EntityObjectTest
7 {
8class Program
9 {
10static void Main(string[] args)
11 {
12 testEntities db = new testEntities();
13
14#region查询所有学⽣信息记录并输出
15//查询所有学⽣信息记录并输出,⽀持动态延迟查询
16var 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的学⽣的所有选课
31var stu2 = db.Stu.Where(s => s.Sno == "001").SingleOrDefault();
32foreach (var item in stu2.Course)
33 {
34 Console.WriteLine(stu2.Sname + "," + ame);
35 }
36 Console.WriteLine();
37#endregion
38
39#region修改学⽣年龄,并查看对象状态
40//修改学⽣年龄,并查看对象状态
41var 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的学⽣所有记录,包括选课信息
52var 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
92private static void ShowStu(System.Data.Objects.ObjectSet<Stu> query)
93 {
94foreach (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语句,也有利于优化。