EF-实体框加基础(1)
来源:互联网 发布:淘宝刷话费教程 编辑:程序博客网 时间:2024/05/16 11:28
1.ORM对象关系映射(ObjectRelational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
ORM原理
在对对象做持久化时,ORM一般会持久化所有的属性。如:
实体类的属性名:Name -> 数据库字段名:SName
实体类的属性名:Age->数据库字段名:SAge
接下来的工作就是:怎样根据这种方法动态地从对象中获取映射规则,然后动态构造Insert、Update、Delete等SQL语句。这就是实现自己的ORM的原理。
ORM缺点:
自己实现ORM
public class BLLUser { public bool InsertItem(User model) { bool ifInsert = false; string strInsert = "Insert into User(Login, Email, Mobile, Password, Nickname, Status) Values(" + model.Login + "," + model.Email + "," + model.Mobile + "," + model.Password + "," + model.Nickname + "," + model.Status + ")"; if (SQLHelper.ExecuteSql(strInsert) > 0) { ifInsert = true; } return ifInsert; } public IList<User> GetList() { List<User> list = new List<User>(); string strSql = "SELECT * FROM User"; DataSet ds = SQLHelper.Query(strSql); //下面做实体映射 if (ds.Tables[0].Rows.Count > 0) { User model; foreach (DataRow row in ds.Tables[0].Rows) { model = new User(); model.Id = Convert.ToInt32(row["Id"]); model.Login = Convert.ToString(row["Login"]); model.Email = Convert.ToString(row["Email"]); model.Mobile = Convert.ToString(row["Mobile"]); model.Password = Convert.ToString(row["Password"]); model.Nickname = Convert.ToString(row["Nickname"]); model.Status = Convert.ToInt32(row["Status"]); list.Add(model); } } return list; } }
实体框架EntityFramework是ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)由以下三种模型。
(1) 概念层:负责向上的对象与属性显露与访问。
(2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。
(3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider一起,负责实际对数据库的访问和 SQL 的产生。
三.实体框加创建应用,创建和添加很简单,下面使用创建的实体框架获取数据
MallEntities me = new MallEntities(); me.Book.Intersect<Book>(list); var item = me.Book; IEnumerable < Book > list1= me.Book;MallEntities继承自DbContext,DBContext和ObjectContext相似
ObjectContext封装 .NETFramework和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的。
SaveChanges()或
AcceptAllChanges()
使用生成的ef查看列表,EFModel是实体数据模型,用code first生成的数据模型结构,除了类就多了一个EFModel,要拿到数据表toList从数据库中查出来
EFModel ef = new EFModel(); //string str = ef.Database.Connection.ConnectionString; //Response.Write(str); DGdata.DataSource = ef.User.ToList(); DGdata.DataBind();
数据的增删改查都一样
新版实体框加ef5.0或者6.0,使用Add增加数据,实体框架中具体属性的类型是DbSet<TEntity>
DbSet<TEntity>
MallEntities me = new MallEntities(); User user=new User{Login="dddddddddddd",Mobile="dddddd",Email="dd",Nickname="dd",Password="dd",Status=1}; me.User.Add(user); me.SaveChanges();删除数据me.User.Remove(me.User.FirstOrDefault());me.SaveChanges();修改数据,更改了第一条数据的Loginme.User.FirstOrDefault().Login = "4"; me.SaveChanges();DbSet方法介绍 Add将给定实体以“已添加”状态添加到集的基础上下文中,这样一来,当调用 SaveChanges 时,会将该实体插入到数据库中。AddRange将给定实体集合添加到基础化集的上下文中(每个实体都置于“已添加”状态),这样当调用 SaveChanges 时,会将它插入到数据库中。 Remove将给定实体标记为“已删除”,这样一来,当调用 SaveChanges 时,将从数据库中删除该实体。 请注意,在调用此方法之前,该实体必须以另一种状态存在于该上下文中。 具体方法请参考文档
在ef4中增删改查用
public partial class WebForm2 : System.Web.UI.Page { TestEntities te = new TestEntities(); protected void Page_Load(object sender, EventArgs e) { //string strcon = te.Connection.ConnectionString; //Response.Write(strcon); //UserInfo u = new UserInfo(); } //添加一条数据记录 protected void Button1_Click(object sender, EventArgs e) { ObjectSet<UserInfo> obSet = te.CreateObjectSet<UserInfo>(); UserInfo u =0 new UserInfo(); u.UserName = "ti"; u.UserPwd = "126"; obSet.AddObject(u);//添加一条数据 te.SaveChanges();//将所有的更新提交到数据库中。 Response.Write("操作成功"); } //删除一条记录 protected void Button2_Click(object sender, EventArgs e) { ObjectSet<UserInfo> obSet = te.CreateObjectSet<UserInfo>(); UserInfo ui = te.UserInfo.FirstOrDefault(); obSet.DeleteObject(ui);//删除一条数据 te.SaveChanges();//将所有的更新提交到数据库中。 Response.Write("操作成功"); } //更新一条数据记录 protected void Button3_Click(object sender, EventArgs e) { ObjectSet<UserInfo> obSet = te.CreateObjectSet<UserInfo>(); UserInfo ut = te.UserInfo.FirstOrDefault(); ut.UserName = "opkl"; ut.UserPwd = "098"; te.SaveChanges();//将更新的数据提交到数据库中 Response.Write("操作成功"); } }
- EF-实体框加基础(1)
- 【EF 1】EF实体框架 原理+实例
- 技术(1)EF实体框架(一)
- 技术(1)EF实体框架(二)延迟加载
- Entity Framework(实体框架 EF)
- EF-实体框架和Linq(2)
- 初学实体框架EF(Entity Framework)
- EF 加载相关实体
- EF之实体拆分
- EF----实体框架集合
- EF实体框架学习
- EF框架基础(二)
- EF基础一(定义)
- 【MVC 1】MVC+EF实体框架—原理解析
- 10.C#:实体框架EF(entity framework)
- EF MODELS 加注释
- EF-实体对象建立Dome
- EF之ModelFirst实体先行
- 我对Java Serializable(序列化)的理解和总结
- 【软考】网络—OSI七层模型
- 网站变灰
- 必须引入开发者测试的10个强烈信号
- Elasticsearch Installation
- EF-实体框加基础(1)
- JAVA设计模式(14) —<行为型>模板方法模式(Template Method)
- JSP开发过程遇到的中文乱码问题及解决方案
- 物理standby database的日常维护
- Qt5.5.1 +MinGw 打包、发布
- Java FTP上传文件
- ss扫描器 使用说明
- Introduction to Boosted Trees
- 一次完整的HTTP事务是怎样一个过程?