Entity Framework 是微软借鉴ORM思想开发自己的ORM框架,ORM就是将数据表与实体对象相互映射的一种思想。
Entity Framework 的本质还是ADO.NET操作,只是它将ADO.NET封装的更加高级而已。
如何使用?
1,创建实体对象模型。
![916628-20161011152545055-446252813.png](https://i-blog.csdnimg.cn/blog_migrate/ecf57a0a91e9da6de64b3a61846700f0.png)
2.选择从数据库生成实体模型。这里的空模型是可以通过先建模然后根据模型数据库,他们之间可以相互映射,这也是ORM思想。
![916628-20161011152546571-1699178847.png](https://i-blog.csdnimg.cn/blog_migrate/b86e089f92093c733cd75f019a11c80f.png)
在这里的时候可以选择需要映射的表了,选择了就会根据表创建实体类,还有存储过程,视图等等。都可以映射。
![916628-20161011152547461-482816286.png](https://i-blog.csdnimg.cn/blog_migrate/58baa2d942568fdd8ab423920664b44a.png)
都设置完成后,会生成一个edmx 的文件
接下来展开这个文件,你会看到如下:
![916628-20161011152548852-1826222749.png](https://i-blog.csdnimg.cn/blog_migrate/7e75b975014dc2f0d1dfcb6d3b6ae141.png)
如何操作数据库?
1.执行查询操作。
![916628-20161011152549743-601747447.png](https://i-blog.csdnimg.cn/blog_migrate/9f34dd8b83e4d2dc485a3a5d8d4240a3.png)
(1)创建上下文的对象,例如上面的图,上下文对象则是:
TestDemoEntities2 te = new TestDemoEntities2();
(2)创建好上下文对象后,可以直接使用, 上下(文对象 .实体类)的方式来获取实体值!
//直接遍历查询
foreach (var item in te.UserMsg)
{
Console.WriteLine(item.Id + "\t" + item.Name);
}
//第二种查询方法。
#region 实现查询功能的第二种方法,Linq 和List 集合
TestDemoEntities2 tst1 = new TestDemoEntities2();
IQueryable<UserMsg> linq = from user in tst1.UserMsg
select user;
List<UserMsg> uMsgs = new List<UserMsg>();
foreach (var item in linq)
{
if (item.Id <1000001)
{
uMsgs.Add(item);
}
}
foreach (var userList in uMsgs)
{
Console.WriteLine(userList.Id +"\t"+ userList.Name);
}
#endregion
二、删除数据:
UserMsg 是对应数据库表的实体类,
TestDemoEntities2 是上下文对象,以下是删除数据的2种写法,根据主键ID来删除数据,当数据库不存在要删除的ID的时候则会报错:
![916628-20161011152550399-1981854801.png](https://i-blog.csdnimg.cn/blog_migrate/19892e7d93eeece899df82d5cd7906bc.png)
//创建实体类对象
UserMsg userMsg = new UserMsg();
userMsg.Id = 10002;
//上下文对象
TestDemoEntities2 te = new TestDemoEntities2();
te.UserMsg.Attach(userMsg);
//第一种写法
te.Entry(userMsg).State = System.Data.EntityState.Deleted;
//第二种写法
te.UserMsg.Remove(userMsg);
int resultMsg = te.SaveChanges();
Console.WriteLine(resultMsg);
三、修改数据
1.创建对应数据库表的实体对象,或者查询获取一个实体对象。都行。
反正如果这个实体对象对应是 主键在数据库中找不到,那么就会报错如下:
![916628-20161011152551118-590809076.png](https://i-blog.csdnimg.cn/blog_migrate/b0a5431ad7c1956c7bb8bd7c8fc7ae34.png)
2.使用上下文对象来管理实体类,修改状态为Update 然后 调用 SaveChenges();方法保存就OK了
//创建实体类对象
UserMsg userMsg = new UserMsg();
userMsg.Id = 100011;
userMsg.Name = "隔壁老王";
userMsg.Sex = "男";
userMsg.Age = 12;
userMsg.Phone = "11232131421";
//上下文对象
TestDemoEntities2 te = new TestDemoEntities2();
//将实体付到上下文里面管理
te.UserMsg.Attach(userMsg);
//把所有修改状态的实体生成:Update;
te.Entry(userMsg).State = System.Data.EntityState.Modified;
int resultMsg = te.SaveChanges();
Console.WriteLine(resultMsg);
Console.ReadKey();