Entity Framework 使用

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全部加载到内存中

所以当使用一对一的时候可以这样使用,一对多的时候不能这么使用

原文地址:https://www.cnblogs.com/yxlblogs/p/3567785.html