首先再Model中创建一个类[WMBlogDB]

public class WMBlogDB : DbContext
{ //连接字符串。
public WMBlogDB()
: base("name=WMBlogDB")
{
} //sysUserInfo.cs 是一个model里面有id name等等信息
public DbSet<sysUserInfo> sysUserInfos { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//移除表明为复数
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// //自动添加实现EntityTypeConfiguration的类
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(modelBuilder);
}
//为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First 模型
//的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。 }

1】新增,网上有觉得十分良好的两种方式,先举例。

方式一
WMBlogDB db = new WMBlogDB();
sysUserInfo sos = new sysUserInfo()
{
Name = "Admin111",
PWD = "",
RealName = "超级管理员",
};
//创建ef容器对象,并后去当前实体对象的状态管理对象
DbEntityEntry<sysUserInfo> entry = db.Entry<sysUserInfo>(sos);
//添加
entry.State = EntityState.Added;
//保存到数据库
db.SaveChanges()
方式二
using (WMBlogDB dbs = new WMBlogDB()) {
sysUserInfo sys = new sysUserInfo();
Stopwatch st = new Stopwatch();
st.Start();
db.sysUserInfos.Add(new sysUserInfo
{
Name = "Admin111",
PWD = "",
RealName = "超级管理员",
});
dbs.SaveChanges()
}
//其实这里可以不用using包裹,可以和方式一一样先new WMBlogDB,然后直接使用。
//这里使用using:只要离开了这个代码段就自动调用这个类实例的Dispose。
//要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便

2】删除

  #region 删除
//方式一
using (WMBlogDB db = new WMBlogDB())
{
sysUserInfo us = new sysUserInfo()
{ uID =
};
db.Entry<sysUserInfo>(us).State = EntityState.Deleted;
return Content(db.SaveChanges().ToString() + "ss");
} //方式二
using (WMBlogDB dbs = new WMBlogDB())
{
List<sysUserInfo> list = dbs.sysUserInfos.Where(u => u.uLoginName == "Admin111" & u.uLoginPWD == "").ToList();
//Any表示只要集合中有值就返回true 否者返回float
if (list != null && list.Any())
{
foreach (sysUserInfo item in list)
{
dbs.sysUserInfos.Remove(item);
}
// dbs.SaveChanges();
}
// int ss = dbs.SaveChanges();
return Content(dbs.SaveChanges().ToString());
}
//在执行代码期间,发现方式1只能通过id来删除,通过其他值则会报错。这点有人解决的话,感谢留言
#endregion

3】修改

    #region 修改
//方法1
using (WMBlogDB dbs = new WMBlogDB())
{
var model = dbs.sysUserInfos.FirstOrDefault(u => u.uLoginName == "Admin111");
model.uLoginName = "TS";
model.uLoginPWD = "";
return Content(dbs.SaveChanges().ToString());
//这种方式一次只能修改一条数据
}
//方法二
using (WMBlogDB dbs = new WMBlogDB())
{
sysUserInfo model = new sysUserInfo()
{
uID =,
uRealName = "xiugai"
};
//根据 uid寻找数据,然后uRealName是修改之后数据,
//有点类似添加 //获取代理对象类为Detaceh
//需要先引用 System.Data.Entity.Infrastructure
DbEntityEntry entry = dbs.Entry(model);
//1、将代理类的状态修改成 Unchanged
//2、将代理类中的需要更新的字段的IsModified修改成true
entry.State = EntityState.Unchanged;
entry.Property("uRealName").IsModified = true;
//解决对一个或多个实体验证失败 的方法:关闭EF的实体合法性检查
dbs.Configuration.ValidateOnSaveEnabled = false;
return Content(dbs.SaveChanges().ToString() );
//这种方式目前也只能一次修改一条数据
}
#endregion

4】查询,

 ArrayList list = new ArrayList(); 

             using (WMBlogDB dbs = new WMBlogDB()){

                 var ss = (from us in dbs.sysUserInfos orderby us.uID descending select us).ToList<sysUserInfo>();
string cw = "";
//通过foreach获取值,
foreach (sysUserInfo sof in ss)
{
cw += sof.uLoginName + "|||";
list.Add(sof.uLoginName);
}
string name = list[].ToString();
return Content(name);

5】:分页

using (thEntities db = new thEntities())
{
if (zx == )
{
var ss = (from us in db.Users orderby us.ID descending select us).ToList<Users>();
uu = ss;
}
else
{
var ss = ((from us in db.Users orderby us.ID descending select us).Skip(num * (page - )).Take(num)).ToList<Users>();
uu = ss;
} }

6】:join查询

方式一

 using (thEntities1 db = new thEntities1()) {
var sql = db.Users.Join(db.Study, u => u.LID, g => g.LIDs, (u, g) => new { name = u.Name, naem2 = g.Name, name3 = u.Password });
var list = sql.ToList();
return View();
} var sql = db.表1.Join(db.表2, u => u.表1匹配列名, g => g.表2匹配列名, (u, g) => new { name = u.表一列名, naem2 = g.表二列名, name3 = u.表一列名 }); 方式二
using (thEntities1 db = new thEntities1()) { var query = from d in db.Users
join b in db.Study
//注意,相连接的字段用equals连接
on d.LID equals b.LIDs
select new {
name1=b.Name,
name2=b.LIDs,
name3=b.Name
};
var list = query.ToList();
return View();
}

7】:ef使用sql语句

方法一
using (thEntities1 db = new thEntities1()) {
string SQLStr = string.Format("UPDATE Study SET Name=@name where IDs=@id ");
SqlParameter[] p = new SqlParameter[]{
new SqlParameter("@id",),
new SqlParameter("@name","EGHTT")
};
db.Database.ExecuteSqlCommand(SQLStr, p);
}
方法二[方法1简化版本]
using (thEntities1 db = new thEntities1())
{
string value = "";
string id = "";
db.Database.ExecuteSqlCommand("UPDATE dbo.Storage SET Name ='" + value + "' WHERE ID='" + id + "'");
}

7.1】EF提高查询的方法AsNoTracking

 using (thEntities1 db = new thEntities1()) {
db.Users.AsNoTracking().Where(u => u.LID == ).ToList();
}

7.2】

  List<CodeV> SJO = db.Database.SqlQuery<CodeV>("SELECT * FROM [dbo].[CodeV] WHERE Name='" + txm + "'").ToList<CodeV>();

8】使用存储过程

首先是存储过程(事物)
ALTER PROC [dbo].[AddItems]
@txm VARCHAR(),
@num INT,
@jsr VARCHAR(),
@people INT,
@Msg VARCHAR() OUTPUT
AS
BEGIN BEGIN TRAN
BEGIN TRY
---SQL操作语句
COMMIT
END TRY
BEGIN CATCH
SET @Msg='失败!'
ROLLBACK
END CATCH END 然后是执行存储过程
List<SqlParameter> paramArry = new List<SqlParameter>();
paramArry.Add(new SqlParameter("@txm", txm));
paramArry.Add(new SqlParameter("@num", num));
paramArry.Add(new SqlParameter("@jsr", jsr));
paramArry.Add(new SqlParameter("@people", people));
SqlParameter param = new SqlParameter("@Msg", SqlDbType.VarChar, );
param.Direction = ParameterDirection.Output;
paramArry.Add(param);
using (WHEntity db = new WHEntity())
{
try
{
db.Database.ExecuteSqlCommand("EXEC [AddItems] @txm,@num,@jsr,@people,@Msg OUT", paramArry.ToArray());
Msg = paramArry[].Value.ToString();
}
catch (Exception ex)
{
string gg = ex.ToString();
string sss = ex.Message; Msg=sss +""+ gg;
} }

9】Other

聚合函数 Average、Count、Max、Min、Sum
using(thEntities1 db=new thEntities1()){
var li=db.User.Max(p=>p.Num);
}

10】补充

控制器中返回json格式

JsonConvert.SerializeObject(new { code = 0, msg = "", count = numss, data = dr });

// JsonConvert.SerializeObject(new { 参数1= 值1, 参数2= 值2});

之后遇到新的知识将会在此补充

MVC学习之路(1) EF 增删查改合集的更多相关文章

  1. 4.在MVC中使用仓储模式进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...

  2. EF增删查改加执行存储过程和sql语句,多种方法汇总

    ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...

  3. MongoDB入门学习(三):MongoDB的增删查改

            对于我们这样的菜鸟来说,最重要的不是数据库的管理,也不是数据库的性能,更不是数据库的扩展,而是怎么用好这款数据库,也就是一个数据库提供的最核心的功能,增删查改.         由于M ...

  4. EF增删查改(三)------终极版

    1.Add #region 1.1 新增学生信息(定义成Int类型,返回受影响的行数) /// <summary> /// 新增学生信息 /// </summary> /// ...

  5. EF增删查改基类

    /// <summary> /// EF DAL CURD基类 /// </summary> /// <typeparam name="T">& ...

  6. mybatis学习总结(三)——增删查改

    映射器是mybatis的基础和核心,下面学习下映射器的使用 映射器的主要元素 select  查询语句,可以自定义参数和返回结果集 insert  插入语句,返回一个整数,代表插入的条数 update ...

  7. MongoDB学习之(三)增删查改

    发现一篇Java操作MongoDb不错的文章,记录一下: https://www.cnblogs.com/sa-dan/p/6836055.html 基本功能. import java.util.Ar ...

  8. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  9. 在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

随机推荐

  1. 初识大数据(二. Hadoop是什么)

    hadoop是一个由Apache基金会所发布的用于大规模集群上的分布式系统并行编程基础框架.目前已经是大数据领域最流行的开发架构.并且已经从HDFS.MapReduce.Hbase三大核心组件成长为一 ...

  2. .NET工行E生活接入AES加密算法的吐槽-2018

    工行E生活V2版本AES加密算法 吐槽一下工行的java算法,真的是非标准的,参考了java代码,还参考了php代码终于搞定了. 真的是很坑,很坑.中间还涉及到多重加密之类的,一行行把代码翻译成C#代 ...

  3. linux vsftp 简单配置

    查看自己是否安装vsftp rpm -qa | grep vsftp rpm -qa 查看自己已安装的包 过滤vsftp systemctl rsetart vsftpd 重启服务 先关闭防火墙 sy ...

  4. android 图片内存管理

    图片对象: drawable bitmap etc.图片对象在Android上该缓存吗?什么时候缓存?怎么缓存?缓存后使用时怎么取出?怎么销毁?什么时候销毁? bitmap对象(new出来的) :需要 ...

  5. MySQL基础操作1

    1.进入MySQL的两种方式: (1).MySQL自带的控制台 直接输入密码 (2).命令提示符: mysql -uroot -proot 然后再输入密码 MySQL常用指令 ------- 1.启动 ...

  6. NodeJs在windows上安装配置测试

    Node.js简介简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个 ...

  7. EBS API及接口清单

    https://www.cnblogs.com/lizicheng/p/9521742.html 模块 应用场景 类型 API/接口 AP 付款核销 API ap_pay_invoice_pkg.ap ...

  8. 最容易理解的对卷积(convolution)的解释

    啰嗦开场白 读本科期间,信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积.硕士期间又学了线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念.至于最近大火 ...

  9. Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件

    DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...

  10. PHP新特性Trait

    Trait是PHP 5.4引入的新概念,看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么:提供模块化实现.Trait ...