今天学习了ORM中的Entity FrearmeWork框架,其实之前看到orm框架,感觉好高大上啊,还没准备去了解它那,今天我们就学习了这个,其实Entity FrearmeWork框架和Nhibernate实现ORM的两套方案,一是用于系统与数据库之间的操作交互和实体类与SQL语句之间的转换。另一个为ORM自动生成工具,用于实体类,前台HTML代码,业务逻辑调用代码的自动生成。但是我们目前仅仅学习了Entity FrearmeWork框架,下面就简单的总结一下它的建构。

一.从数据库映射C#项目

添加一个ADO.NET实体数据模型,然后我们根据向导添加完成。

下面来看下他们的内容,需要注意的有四部分,我们需要注意两部分,分别为StudentContext.cs和Register.cs,Student.cs,在这里说一下连接的境像:

在这里我么可以看到StudentEntities继承了DbContext的连接,而DbContext存在一个方法连接我们的数据库,参数中存在一个属性ConnectionString,关系就是这样的。

这里就是一个自动映射成的实体类,和数据库中的字段是一样的。

二.现在C#中创建实体,然后映射到数据库

仍然不变的使我们要添加一个ADO.NET实体数据模型,然后建立一个空模型即可,然后添加实体,设置关系以及属性的类型,最后选择根据模型生成数据库,最重要的是需要执行一个“执行”即可,这个是不能忘记的,然后我们即可把C#中的实体映射到我们的数据库中。

  

在这里,我们可以好奇为什么它们没有关系怎么可以映射那,其实还是创建了SQL语句,上面就是在User.edmx.sql中查找到的,嘿嘿,所以还不是很神奇的。被我们发现啦。在这里需要区别的是我们从数据库映射时间创建的是StudentEntities,而从C#映射到数据库创建的是UserContainer,就是Entities与Container的不同,另外在创建C#映射到数据库还创建了一个.edmx.sql,这些都是我们可以区分的地方,这就是我们创建的EF模型。

三.EF中增删改查的语句:

        static void Main(string[] args)
{
StudentEntities entities = new StudentEntities(); //初始化对象
Register register = new Register();
#region 增加
//register.UserName = "张三";
//register.Pwd = "123";
//register.Sex = "男";
//register.Phone = "123456";
//register.Age = "20";
//register.Address = "河南郑州";
//entities.Register.Add(register); //添加一个集合使用Add
//entities.SaveChanges(); //保存
#endregion #region 删除
//Register r = entities.Register.Where(i=>i.Id==39).SingleOrDefault(); //在这里需要注意的是Lambda表达式的i属性Register,它是一个集合,所以需要它.出来他的id项
//entities.Register.Remove(r); //删除使用的是Remove
//entities.SaveChanges();
#endregion #region 修改
//Register rr = entities.Register.Where(i => i.Id == 40).SingleOrDefault(); //修改时间记得先查询要修改的条件
//rr.UserName = "zhangsan"; //在这里需要注意的是接受的对象
//rr.Pwd = "456";
//rr.Sex = "女";
//rr.Phone = "123456789";
//rr.Age = "20";
//rr.Address = "北京";
//entities.SaveChanges(); //保存
#endregion #region 查询
//Register rrr = entities.Register.Where(i => i.Id == 41).SingleOrDefault();
//Console.WriteLine("{0},{1},{2}",rrr.Id,rrr.UserName,rrr.Pwd); //Register rrr = entities.Register.SelectMany(i=>i.Id==40&&i.Id==41).SelectMany();
#endregion Console.WriteLine("ok");
Console.ReadKey();
}

嘿嘿,这就是我们在EF模型中对数据库操作的语句,需要注意的是,我们在执行完后记得保存一下数据,就是当前状态记得保存,这个是容易忘记的,另外在这里参数为Lambda表达式时间要准确使用。

四.实体中存在约束执行的语句

        static void Main(string[] args)
{
UserContainer container = new UserContainer();
Tea t = new Tea();
//t.ID = 1;
t.Name = "lisi";
t.Pwd = "";
t.Sid = ; Stu stu = new Stu();
//stu.ID = 1;
stu.Name = "zhangsan";
stu.Pwd = "";
container.Tea.Add(t);
container.Stu.Add(stu);
container.SaveChanges(); Console.WriteLine("ok");
Console.ReadKey();
}

存在外键关系的我们需要注意的是,当我们在添加一个表的数据时,另外一个外键的属性也需啊哟赋值,如果我们设置Id的属性为自动增长,那么我们设置的外键的值则每次自动增长,如果设置不变,则只需要不填写即可。

其实这个EF模型的总结我感觉我们学习的不多,但是不知道从哪开始总结,也向更深入的了解一下,接下来还是自己查找吧,好啦,就写到这里,嘿嘿。

EF的学习的更多相关文章

  1. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

  2. [ASP.NET MVC]: - EF框架学习手记

    1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架. 2.什么是ORM?ORM指的是面向对象的对象模型和关系型 ...

  3. EF Core学习Code First

    下面通过实例来学习EF Core Code First,也就是通过EF Core迁移来完成从模型生成数据库. 本实例使用EntityFrameworkCore SQLite 数据库进行介绍,大家也可以 ...

  4. EF Code-First 学习之旅 继承策略

    Code First中有三种不同的方法表示继承层次关系 1.Table per Hierarchy (TPH): 这种方法建议用一个表来表示整个类的继承层次关系,表中包含一个识别列来区分继承类,在En ...

  5. EF CodeFirst学习

    EF CodeFirst 真是时光如梦,岁月如歌,自己一不留神就被后浪拍在了沙滩上,就连我要学的这个东西也是12年就在博客园很火了. EF有三种开发模式,DatabaseFirst, ModelFir ...

  6. EF框架学习

    简称EF,ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,是微软的一个ORM(面向对象的对象模型和关系型数据库的 ...

  7. EF CodeFirst学习笔记004--足够聪明

    将BlogTypes注释掉,但因为Blogs中定义了BlogType 这样类型的属性,所以Ef会聪明的找到BlogType类. public class BlogEntities:DbContext ...

  8. EF CodeFirst学习笔记001--主键约定

    Code First 的核心是约定,这些默认的规则使我们可以用我们自己的类来创建模型.EF框架要求一个类必须有一个键属性.规则约定如果一个属性名为Id或者是类名+Id的形式(如PatientId),这 ...

  9. EF Code-First 学习之旅 配置一对一的关系

    1对1.1对0 的关系 例如:Entity1与零个或一个Entity2的实例有关系 public class Student { public Student() { } public int Stu ...

随机推荐

  1. Python之输出当前时间

    import time print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

  2. Axiom3D:Ogre中Mesh文件格式分析(一)

    在Axiom3D,或者说是Ogre的mesh的文件格式我们可能通过代码反推出相关格式,相关过程本来我是直接写的,后面发现相关流程写完后,我自己都看晕了,然后我就把一些过程用Execl整理出来,发现过程 ...

  3. Git -- 分支管理简介

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  4. CI框架 -- 密码哈希

    哈希算法是一个单向函数.它可以将任何大小的数据转化为定长的“指纹”,并且无法被反向计算 依赖性 crypt() 函数需支持 CRYPT_BLOWFISH 常量 PASSWORD_BCRYPT PASS ...

  5. Zookeeper系统设计的优点

    转自:Zookeeper系统设计的优点.http://webcache.googleusercontent.com/search?q=cache:s6fr40t_5ncJ:www.chaozh.com ...

  6. Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

    严重:   Error   configuring   application   listener   of   class   org.springframework.web.context.Co ...

  7. android 解决输入法键盘遮盖布局问题

    /**     * @param root 最外层布局,需要调整的布局     * @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToVie ...

  8. word文档加密破解方法,实测有效

    其他方法也可以,如下: http://www.360doc.com/content/13/1227/10/8726682_340474327.shtml

  9. R 语言消除pdf图片的空白

    pdf 函数中,有一个参数onefile ,  默认值为TRUE, 表示每张图片占用pdf 中的一页 当遇到pdf的前几页为空白时,是因为画图的代码产生了几张空白的图片 如果要消除前面的空白,只需要设 ...

  10. UGUI 加载图片

    图片是动态加载的,然后转换为sprite赋值到ugui的按钮上 代码如下 using UnityEngine; using System.Collections; using System.IO; u ...