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

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

你可能感兴趣的:(framework)