Entity FrameWork的增删改和查询、延迟加载、EF下的多表链接查询

1。Entity FrameWork的增删改:

 demoEntities db = new demoEntities();//EF上下文

Product product = new Product();
//product.PName = "zifu";
//product.DelFlag = 0;
//db.Product.AddObject(product);//AddObject的方法的本质为先Attach,后db.ObjectStateManager.ChangeObjectState(product, EntityState.Added),最后SaveChanges()。
//db.SaveChanges();

product.Id = 3;
product.PName = "这是第三项";
product.DelFlag = 0;
db.Product.Attach(product);
db.ObjectStateManager.ChangeObjectState(product, EntityState.Added);//添 加时不关心 db中的主见
//db.ObjectStateManager.ChangeObjectState(product, EntityState.Deleted);//删 除那一项
//查询;
//db.ObjectStateManager.ChangeObjectState(product, EntityState.Modified);//修 改那一项


int res = db.SaveChanges();
Console.WriteLine(res);

2。Entity FrameWork的查询1:

var temp = from c in db.Product
where c.Id > 4
select c;

foreach (var product1 in temp)

{
Console.WriteLine(product1.PName);
}

3。Entity FrameWork的查询2:

var temp = db.Order.Where<Order>(o => o.ID > 3);
foreach (var t in temp)
{
Console.WriteLine(t.OName);
}

4。延迟加载:(多表联合添加  进行延迟加载添加数据)

UserInfo userInfo = new UserInfo();
userInfo.UName = "xiaosan";
userInfo.Sex = "f";
userInfo.Age = 20;

Order order1 = new Order();
Order order2 = new Order();
order1.OName = "content 1";
order1.DelFlag = 0;
order1.UserInfoID = userInfo.ID;

order2.OName = "content 2";
order2.DelFlag = 0;
order2.UserInfoID = userInfo.ID;


db.UserInfo.AddObject(userInfo);
db.Order.AddObject(order1);
db.Order.AddObject(order2);

int res = db.SaveChanges();//最后保存到db中[延迟加载]

Console.WriteLine(res);\

5。多表链接查询:

var temp = from c in db.Order
select new { myId = c.ID, orderName = c.OName, userInfoName = c.UserInfo.UName };
//c.UserInfo为订单表的外表用户表;EF根据向导关联的,所以可以找到订单表所对应的用户表;
foreach (var item in temp)
{

Console.WriteLine("order:{0}--orderName:{1}--对应的用户名称:{2}", item.myId, item.orderName, item.userInfoName);


}

6。延迟加载二:

var temp = from c in db.UserInfo
select c;
//multiple 10 子表查10次;datatable 弱类型:不知道那些列;强类型的可以点出来;
// 下面这种查询可以避免两个表的join;
foreach (var userInfo in temp)
{
Console.WriteLine(userInfo.ID);
foreach (var order in userInfo.Order)
{
Console.WriteLine(order.OName);
}
}

7。查询单个实体:

var temp = (from u in db.UserInfo
where u.ID == 1
select u).FirstOrDefault();
if (temp != null)
{
temp.UName = "first uname";
db.SaveChanges();
}

8。查询单个实体:

var temp = (from u in db.UserInfo
where u.ID == 1
select u).FirstOrDefault();//First();Single();SingleOrDefault();
Console.WriteLine(temp.UName);//打印
if (temp != null)
{
temp.UName = "first uname";//查询出来之后,可以直接对其进行更改操作;
db.SaveChanges();//保存到数据库中;
}

9。分页:

var temp = db.Order.Where<Order>(o => true)//Order 可以去掉
.OrderBy(o => o.ID)
.Skip<Order>(10)//Order 可以去掉
.Take<Order>(10);//Order 可以去掉
foreach (var singleOrder in temp)
{
Console.WriteLine("{0}---{1}", singleOrder.ID, singleOrder.OName);
}

10。上下文管理:

//ObjectContext obj=new ObjectContext();
// 一个请求指定一个上下文实例;
//把上下文放到httpContext,httpContext->CallContext(线程内唯一的数据槽);

原文地址:https://www.cnblogs.com/LpRightNow/p/2838870.html