.Net EntityFramwork6.0 EF框架开发入门
2024-08-21 10:00:24
一、环境
开发环境:Sqlserver2008 R2、Visual Studio2012
二、准备工作
1、新建MVC空项目
2、通过NuGet获取 EntityFramework 包
操作截图:
三、代码实现
1.建立实体类
[Table("User")]
public class User
{
[Display(Name="id")]
public int Id {get;set;}
[Display(Name="UserName")]
[Required(ErrorMessage="用户名必填")]
public string UserName { get; set; }
[Display(Name="Password")]
public string Password { get; set; }
}
2.构建数据库访问类
a)、继承DbContext
b)、创建数据库连接字符串,字符串名称与a)步骤类名称一致,也可不一致(需指定数据库访问串)
public class DemoConnectionContext : DbContext
{
public DbSet<User> dbuser { get { return Set<User>(); } }
public DemoConnectionContext()
: base("name=DemoConnectionContext") //指定数据库访问串
{
}
static DemoConnectionContext()
{
Database.SetInitializer<DemoConnectionContext>(new DropCreateDatabaseIfModelChanges<DemoConnectionContext>());
}
}
3.数据库操作
//声明数据库操作类
DemoConnectionContext db = new DemoConnectionContext();
a)、增加数据
User user = new Models.User{UserName = "jay", Password = ""};
db.dbuser.Add(user);
db.SaveChanges();
b)、查询数据
//指定ID查询
var userObj=db.dbuser.Find(); //写法一
var userObj = db.dbuser.Where(u => u.Id == ).FirstOrDefault(); //写法二
//写法三
var userObj = (from u in db.dbuser
where u.Id ==
select u).ToList();
c)、更新数据
//更新表
var userObj = (from u in db.dbuser
where u.UserName == "jay"
select u).ToList();
userObj[].Password = "";
db.dbuser.Attach(userObj[]);
//更新指定列
var setEntry = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager.GetObjectStateEntry(userObj[]);
setEntry.SetModifiedProperty("Password");
db.SaveChanges();
d)、删除数据
//删除数据 指定ID即可
User userObj = new User { Id = };
db.dbuser.Attach(userObj);//附加对象
db.dbuser.Remove(userObj);//删除对象
db.SaveChanges();
e)、事物操作 多表操作,操作放在 TransactionScope
try
{
//事物 多表操作,操作放在 TransactionScope
using (var trac = new TransactionScope())
{
User user = new User { UserName = "jack", Password = "" };
db.dbuser.Add(user);
//throw new Exception("抛出异常");
user = new User { UserName = "David", Password = "" };
db.dbuser.Add(user);
db.SaveChanges();
trac.Complete();//事物提交,如未执行该方法,出事务作用范围自动回滚
}
}
catch (Exception ex)
{
throw; }
f:)、T-SQL查询
1) sql 查询,实体类
//sql 查询,实体类
var userList = db.Database.SqlQuery<User>("select id,UserName,Password from [User]").ToList();
2)指定对象查询实体
var userList= db.dbuser.SqlQuery("select id,UserName,Password from [User]").ToList();
3) 执行SQL命令
db.Database.ExecuteSqlCommand("update [User] set UserName='Michel' where UserName='jay'");
常见错误解答
1、错误信息:The model backing the 'DemoConnectionContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
错误信息大体意思为:因实体类属性或实体关系、实体名称发生变化,EF脚本需重新更新数据库信息与实体保持一致。
解决方法:1.备份数据库,关闭所有数据库操作,EF框架自动更新脚本(通常删除库后重新创建库,如果数据库已经在使用,并且不想删除现有数据,不建议使用运行脚本)
2.指定不同步更新数据库,可设置为 Database.SetInitializer<DemoConnectionContext>(null);,手动更新数据库与实体类保持一致
最新文章
- TCP三次握手的正确使用姿势
- 手机端多种分享plugin插件地址
- 从零开始学习jQuery (一) 入门篇
- IOS 音效
- Tomcat 安装--小白教程
- RFID 基础/分类/编码/调制/传输
- C++中不可重载的5个运算符
- AbsListView.OnScrollListener 使用注意事项
- AndroidApplication Fundamentals(Android应用基础)
- jquery M97-datepicker日历控件
- mysql logstash 配置
- Salesforce使用truncate清空数据库
- jenkins 使用注意
- 为Distinct准备的通用对比器
- JAVA集合类兄妹List和Set
- [转帖]Docker容器CPU、memory资源限制
- linux内存和swap
- sql添加一个list的查询条件
- LeetCode 46 全排列
- SQL注入之Sqli-labs系列第十三关(基于单引号POST的报错注入)
热门文章
- Several ports (8005, 8080, 8009)被占用
- redis笔记总结之redis安装
- char码值对应列表大全
- python模板:自动化执行测试函数
- Problem : 1196 ( Lowest Bit )
- SQL Server The target database (&#39;db&#39;) is in an availability group and currently does not allow read only connections. For more information about application intent, see SQL Server Books Online.
- secureCRT的安装及破解
- js---BOW---页面打开方式,跳转方式 2017-03-24
- .Net调用钉钉接口,实现发送企业消息功能
- Linux中断子系统:级联中断控制器驱动