1.EF中Include方法的使用
使用Include方法,告诉EF连接查询哪个外键属性,生成Inner join连接
//必须引用using System.Data.Entity;才能用Include
IQueryable<UsersAddress> addrs = db.UserAddresses.Include(u=>u.User);
//IQueryable<UsersAddress> addrs = db.UserAddresses.Include("User");
foreach(UsersAddress add in address) { Console.WriteLine(add.udAddress+":userName="+add.User.uName); }
2.EF中修改对象,不需要先查询,然后修改
User user = new User(){ uId=8,uName = "aa"}; //将对象加入EF容器中并获取当前实体对象的状态管理对象 DbEntityEntry<User> entry = db.Entry<User>(user); entry.State = System.Data.EntityState.Unchanged; //设置该对象的uName属性为修改状态
//必须引用using System.Data.Entity;才能用Property
entry.Property(u=>u.uName).IsModified = true;
//entry.Property("uName").IsModified = true; db.SaveChanges();
3.EF中删除操作
User user = new User(){ uId=8}; db.Users.Attach(user); db.Users.Remove(user); db.SaveChanges();
4.EF执行存储过程
在 Sql Server 2008 中创建一个简单的存储过程,如下:
CREATE PROCEDURE [dbo].[P_GetArticleByID] @ID int AS BEGIN SELECT ID,Title FROM Articles WHERE ID=@ID; END
查询存储过程在 Controller 中的写法:
BlogContext db = new BlogContext(); SqlParameter[] parms = new SqlParameter[1]; parms[0] = new SqlParameter("@ID", 1); var result = db.Articles.SqlQuery("exec P_GetArticleByID @ID", parms); return View(result);
可见,我们通过执行 Sql 语句的方法来使用存储过程.增、删、改方法:
int result = db.Database.ExecuteSqlCommand("exec P_DeleteArticleByID @ID", parms);
5.EF中查询一对多的数据注意
SalesCoupon s = db.SalesCoupon.FirstOrDefault();
int i = s.UserCoupon.Where(u => u.IsUse == true).Count();//这里查询的时候会将s相关的UserCoupon全部加载到内存中然后在内存中进行筛选
ICollection<UserCoupon> userCoupons = s.UserCoupon;//此时就会将s相关的UserCoupon全部加载到内存中
所以当使用一对一的时候可以这样使用,一对多的时候不能这么使用