在Code first中使用数据库里的视图
时间:2022-03-10 17:13
如果想在Code first中使用数据库里的视图
(不管你出于什么原因),目前的方法有2种。
一、使用Database.SqlQuery<T>("查询语句"),如:
var query = db.Database.SqlQuery<ReplyStatusViewModel>("SELECT * FROM dbo.vReplyStatus")
然后在vReplyStatus视图的基础上进行各种查询:
var qqo = query.Where(p => p.PrdOrd.Contains("袁")); var count = qqo.Count();//会出错!-->nullreferenceexception-->因为PrdOrd字段里有null或空值。
改为如下可通过:
var qqo = query.Where(p => p.PrdOrd != null && p.PrdOrd.Contains("袁"));
这样产生的语句是:
SELECT * FROM dbo.vReplyStatus.Where(p => ((p.PrdOrd != null) AndAlso p.PrdOrd.Contains("袁")))
但是在使用到dynamic linq时好像无法把p.ProdOrd != null 加上,dynamic linq产生的语句是:
SELECT * FROM dbo.vReplyStatus.Where(p => p.Planner.Contains("袁")).Union(SELECT * FROM dbo.vReplyStatus.Where(p => p.PrdOrd.Contains("袁"))).Union(SELECT...
这是一个模糊查询语句,在所有的字段中查找包含袁的数据。但是少了!=null 的条件,这样在计数的时候var count = qqo.Count();就会出错。
二、在上下文中加入视图模型
现在使用的是第二种方法,将ReplyStatusViewModel类加入上下文类中,然后在model创建时加入该实体(把视图假装是一个表)。提示数据迁移后,先不要update-database!把迁移文件中的内容注释掉,即把 public override void Up() 和 public override void Down()的内容清空,来进行一次空的迁移,最后更新数据库。
步骤如下:
1、创建类(ReplyStatusViewModel)该类和视图中的字段一一对应。
最后运行
PM> Update-Database
在Controller里可以像使用其他实体类一样来使用视图了!
--End--
在Code first中使用数据库里的视图,布布扣,bubuko.com