今天研究了下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的更多相关文章

  1. Visual 2015创建新项,缺少ADO.NET 实体数据模型的解决方法

    现在的某度查资料真的很麻烦,突然我自身的VS2015创建EF的时候找不到 ADO.NET 实体数据模型,但是使用CodeFrist是可以生成数据表的.所有特别郁闷. 打开界面如下 某度半天,都没有查出 ...

  2. Model First:创建实体数据模型(ADO.NET 实体数据模型)

    Microsoft Entity Framework是一个对象关系映射工具(Object Relational Mapping ,O/RM)工具.它可以让你从一个数据库自动地生成数据接入层.实体框架免 ...

  3. vs212创建mvc3项目,添加ADO.NET实体数据模型时产生 XXXX.Desiger.cs 文件为空

    vs212创建mvc3项目,发现添加ADO.NET实体数据模型时,产生StoreDB.Desiger.cs文件为空 产生StoreDB.Desiger.cs文件为空 原因是,在vs2012中,添加AD ...

  4. Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源

    熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件. 但是这个模型向导默认只显示微软 ...

  5. 《MVC+EF》——用DBFirst创建ADO.NET实体数据模型和对象关系映射

    转载于:http://blog.csdn.net/zhoukun1008/article/details/50528145 现在越来越喜欢MVC了,不光是因为ITOO中用到了他,而是因为它里面包含了很 ...

  6. ADO.NET实体数据模型中关于数据库字段默认值的处理

    无论是Visual Studio 2010或者2013内置的ADO.NET实体数据模型都有一个小问题:数据库中有些字段已设置了默认值,但ADO.NET实体数据模型工具并不会自动进行设置. 这时需要手工 ...

  7. Visual Studio2017中如何让ADO.NET实体数据模型[EntityFramework]支持MariaDB&MySQL数据源

    近期由于工作需要,需要重新修改设计系统的ADO.NET实体数据模型.edmx文件中间,在完成实际中途遇到一些实际使用问题,特此记录. 1. Visual Studio 2017 无法以实体设计模式打开 ...

  8. ADO.NET实体数据模型

    本文说一下如何使用ADO.NET实体数据模型,并解释一些概念. 1,首先你要建立一个数据库.比如我在SQL2005上面建立了数据库student,包含两个表: 2,然后再项目上添加新建项: 3,打开新 ...

  9. Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码

    在创建EF模型的时候,VS2013提示说“在连接字符串中存储敏感数据可能有安全风险”,于是我选择了在代码中添加,可是如何通过代码添加呢? 我在网上百度了下,没有人说的清楚直观. 假设我们创建了一个名字 ...

随机推荐

  1. 关于sqoop与datax。 和sqoop to oracle插件OraOop

         之前我还在想了解下datax,是否有可能替换sqoop,但了解后发现,datax和sqoop的业务场景是不同的.前者适合异构数据库的同步,后者适合hdfs与rdbms互相之间的同步.针对sq ...

  2. LilyPad Arduino可穿戴技术和电子织物控制器板简介

    LilyPad Arduino可穿戴技术和电子织物控制器板简介 第1章  LilyPad Arduino概览 作为本书的第一章,在这里将为读者介绍LilyPad Arduino相关的基础知识.例如,L ...

  3. [LintCode] Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  4. POJ2407 Relatives(欧拉函数)

    题目问有多少个小于n的正整数与n互质. 这个可以用容斥原理来解HDU4135.事实上这道题就是求欧拉函数$φ(n)$. $$φ(n)=n(1-1/p_1)(1-1/p_2)\dots(1-1/p_m) ...

  5. datetime与smalldatetime之间的区别

    1.一直以为smalldatetime和datetime的差别只是在于时间范围: smalldatetime的有效时间范围1900/1/1~2079/6/6datetime的有效时间范围1753/1/ ...

  6. BZOJ3570 : DZY Loves Physics I

    考虑两个质量均为m,速度分别v1.v2的小球发生完全弹性碰撞的影响: 由动能守恒得: $\frac{1}{2}mv_1^2+\frac{1}{2}mv_2^2=\frac{1}{2}mv_1'^2+\ ...

  7. [Cocos2d-x For WP8]基础知识

    一.重要概念 导演(CCDirector) 在cocos2d-x引擎中,CCDirector类是整个游戏的组织和控制核心,游戏的运行规则,游戏内的CCScene(场景).布景(CCLayer).角色( ...

  8. BZOJ3924 [Zjoi2015]幻想乡战略游戏

    Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...

  9. FFMPEG解码流程

    FFMPEG解码流程:  1. 注册所有容器格式和CODEC: av_register_all()  2. 打开文件: av_open_input_file()  3. 从文件中提取流信息: av_f ...

  10. elasticsearch2.2 集群搭建各种坑

        目前生产环境的es版本是1.0版本,需要升级到最新的2.2版本,于是在测试环境进行部署集群测试,在测试过程中遇到的坑相当多,下面详细介绍下.       1. 版本升级到2.2后,必须建一个单 ...