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()方法:
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 = "", Sname = "niulinhua", Age = }; //亦可Stu s = db.Stu.CreateObject();之后再对象属性赋值
stu1.Course.Add(new Course() { Cno = "", Cname = "math" });
db.Stu.AddObject(stu1);
db.SaveChanges();
ShowStu(query);
#endregion #region 查询学号001的学生的所有选课
//查询学号001的学生的所有选课
var stu2 = db.Stu.Where(s => s.Sno == "").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 == "").First();
Console.WriteLine(stu3.EntityState.ToString());
stu1.Age = -;
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 == "").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语句,也有利于优化。
ADO.NET实体数据模型使用探索1的更多相关文章
- Visual 2015创建新项,缺少ADO.NET 实体数据模型的解决方法
现在的某度查资料真的很麻烦,突然我自身的VS2015创建EF的时候找不到 ADO.NET 实体数据模型,但是使用CodeFrist是可以生成数据表的.所有特别郁闷. 打开界面如下 某度半天,都没有查出 ...
- Model First:创建实体数据模型(ADO.NET 实体数据模型)
Microsoft Entity Framework是一个对象关系映射工具(Object Relational Mapping ,O/RM)工具.它可以让你从一个数据库自动地生成数据接入层.实体框架免 ...
- vs212创建mvc3项目,添加ADO.NET实体数据模型时产生 XXXX.Desiger.cs 文件为空
vs212创建mvc3项目,发现添加ADO.NET实体数据模型时,产生StoreDB.Desiger.cs文件为空 产生StoreDB.Desiger.cs文件为空 原因是,在vs2012中,添加AD ...
- Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源
熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件. 但是这个模型向导默认只显示微软 ...
- 《MVC+EF》——用DBFirst创建ADO.NET实体数据模型和对象关系映射
转载于:http://blog.csdn.net/zhoukun1008/article/details/50528145 现在越来越喜欢MVC了,不光是因为ITOO中用到了他,而是因为它里面包含了很 ...
- ADO.NET实体数据模型中关于数据库字段默认值的处理
无论是Visual Studio 2010或者2013内置的ADO.NET实体数据模型都有一个小问题:数据库中有些字段已设置了默认值,但ADO.NET实体数据模型工具并不会自动进行设置. 这时需要手工 ...
- Visual Studio2017中如何让ADO.NET实体数据模型[EntityFramework]支持MariaDB&MySQL数据源
近期由于工作需要,需要重新修改设计系统的ADO.NET实体数据模型.edmx文件中间,在完成实际中途遇到一些实际使用问题,特此记录. 1. Visual Studio 2017 无法以实体设计模式打开 ...
- ADO.NET实体数据模型
本文说一下如何使用ADO.NET实体数据模型,并解释一些概念. 1,首先你要建立一个数据库.比如我在SQL2005上面建立了数据库student,包含两个表: 2,然后再项目上添加新建项: 3,打开新 ...
- Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码
在创建EF模型的时候,VS2013提示说“在连接字符串中存储敏感数据可能有安全风险”,于是我选择了在代码中添加,可是如何通过代码添加呢? 我在网上百度了下,没有人说的清楚直观. 假设我们创建了一个名字 ...
随机推荐
- 分享Kali Linux 2016.2最新镜像201609
分享Kali Linux 2016.2最新镜像20160919 Kali Linux官方继9月9日发布Kali Linux 2016.2的第36周镜像W36后,9月19日发布了Kali Linux ...
- win 7 普通家庭版 装IIS
每当一个程序员入职的时候,几乎都会干一件事情,就是重装操作系统,这是一场不易之战: 1)耗时太长: 2)容易遇到怪异的系统行为. 1.win7为毛装不上VS2012 先装一个win7 x64 旗舰版, ...
- ural 1221. Malevich Strikes Back!
1221. Malevich Strikes Back! Time limit: 1.0 secondMemory limit: 64 MB After the greatest success of ...
- Period[HDU1358]
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- BZOJ4373 : 算术天才⑨与等差数列
设$pre[i]$表示第$i$个数上一次出现的位置,$d[i]=abs(a[i]-a[i+1])$. 用线段树维护区间内$a$的最小值.最大值,$pre$的最大值以及$d$的$\gcd$. 对于询问$ ...
- hiho#1033 : 交错和
描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1,定义交错和函数: f(x) = a0 - a1 + a2 - ... + ( - 1)n - 1a ...
- java面试题中常见的关于String类问题总结
问题1: String s1 = “abc”;String s2 = “abc”;System.out.println(s1 == s2); 这里的结果是true. 由于字符串是常量(内存中创建对象后 ...
- MatLab 组件大全
MATLAB 矩阵实验室 7.0.1 Simulink ...
- Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别
在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Poly ...
- 五、Pillar数据管理中心
Pillar是数据管理中心. Pillar在saltstack中主要作用是存储和定义一些配置管理中需要的信息(比如:软件版本,用户名,密码等) 修改pillar相关配置文件: [root@super6 ...