您的位置:首页 > 其它

.NET ORM学习之EF框架

2017-01-08 17:01 519 查看
Entity Framework是ORMapping的一种具体实现

其实Entity
Framework的底层也是调用Ado.Net,它是更高层次的封装.作为数据访问的技术,Entity
Framework的设计有高扩展性,这一点可体现在其映射定义的灵活性.简单地说,使用Entity Framework可以充分地定义与数据库表映射的实体,这个实体可以直接用于业务逻辑层或作为服务的数据契约.使用EF后,可以将实体类的设计工作完全放在EDM的设计过程中,而不需要手工写那些大同小异的代码,令人欣喜的是这个实体模型可以在运行时修改并生效,做到一改全改.我们开发时也不用再频繁地与数据库打交道,我们操作实体模型的同时EF框架自动完成了对数据库的操作

下面就是EF简单增删改查的示例  还是请大家看代码吧

首先在项目中添加一个ADO.NET实体数据模型,设置自己需要的数据库表结构,然后生成实体类

添加数据

增加一条记录

[b]上下文实体类在数据模型DataModel.Context.tt里面
[/b]

DataModelContainer dbContext = new DataModelContainer();//创建上下文

Customer customer = new Customer();//创建一个实体对象
customer.CusName = "张三";//给属性赋值

dbContext.Customer.Add(customer);//添加实体
dbContext.SaveChanges();//将上下文所更新的数据保存到数据库中
添加两个表的相关记录

DataModelContainer dbcontext = new DataModelContainer();

//添加一个用户
UserInfo userInfo =new UserInfo();
userInfo.UserName = "用户";
dbcontext.UserInfo.Add(userInfo);//告诉上下文对这个实体进行添加

//添加两个订单
OrderInfo order1 = new OrderInfo();
order1.Content = "订单3";
dbcontext.OrderInfo.Add(order1);

OrderInfo order2 = new OrderInfo();
order2.Content = "订单4";
dbcontext.OrderInfo.Add(order2);

//关联三个实体  两种方法
//1.通过用户添加订单实体到导航属性
userInfo.OrderInfo.Add(order1);
//2.通过订单指定用户实体
order2.UserInfo = userInfo;
dbContext.SaveChanges();


用户表跟订单表是1对多的关系,所以用户表的导航属性OrderInfo是ICollection<OrderInfo>集合,

而订单对用户是唯一的,两种方式都可以添加
bdd1


删除数据

DataModelContainer dbcontext = new DataModelContainer();
UserInfo userInfo = new UserInfo();
userInfo.ID = 1;

//删除数据
dbcontext.Entry(userInfo).State = EntityState.Deleted;//枚举
dbcontext.SaveChanges();

修改数据


UserInfo userInfoEdit = new UserInfo();
userInfoEdit.ID = 1;
userInfoEdit.UserName = "张三" + DateTime.Now;

//修改全部
dbcontext.Entry(userInfoEdit).State = EntityState.Modified;//枚举

//修改单个属性
dbcontext.UserInfo.Attach(userInfoEdit);
dbcontext.Entry<UserInfo>(userInfoEdit).Property(u => u.UserName).IsModified = true;

dbcontext.SaveChanges();


删除跟修改相对比较简单,下面详细说说查询(linq跟lambda两种方式)


查询数据


查询所有数据

//查询所有数据
foreach (Class _cc in dbschool.Class)
{
Console.WriteLine(_cc.Id + " " + _cc.classname);
}

//linq表达式的返回值类型IQueryable<out T>
var temp = from u in dbschool.Class
where u.Id > 1//查询条件
select u;
foreach (var item in temp)
{
Console.WriteLine(item.Id + " " + item.classname);
}


表连接查询

var temp = from u in dbcontext.UserInfo.Include("OrderInfo")
where u.ID > 0 && u.UserName.Contains("张")
select u;

//第一种延迟加载
foreach (var userinfo in temp)//用到的时候才会去查询数据
{
Console.WriteLine(userinfo.ID + " " + userinfo.UserName);
}

//第二种延迟加载
//数据量庞大的时候使用延迟加载,linq不包含include
//数据量小的时候使用include的提高效率
foreach (var userinfo in temp)
{
foreach (var orderinfo in userinfo.OrderInfo)
{
Console.WriteLine(userinfo.UserName + " " + orderinfo.ID + " " + orderinfo.Content);
}
}


分页查询

////lambda表达式写法
var temp = dbcontext.UserInfo//查询表名
.Where(u => u.UserName.Contains("用户"))//查询条件
.OrderBy(u => u.ID)//排序
.Skip(5 * 2)//跳过指定条数
.Take(5);//查询多少条

//linq写法
var temp = (from u in dbcontext.UserInfo
where u.ID > 0
orderby u.ID descending//降序
select u).Skip(5 * 2).Take(5);

foreach (var item in temp)
{
Console.WriteLine(item.ID + " " + item.UserName);
}


以上是我自学过程中所整理的笔记,希望能对正在学习EF框架的朋友一些帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐