Install-package Entityframework 安装EF
1) 安装 Install-Package Autofac
Enable-migrations启动数据迁移
add-migration 'CreateDetabase' 创建迁移
update-database 更新数据库
add-migration 通过迁移名,知道你做什么操作
poco的不能有集合对象,只能输属性
我只执行增删改查语句,不进行其他操作(如果不对数据库有任何其他操作需要关闭对数据库的检查操作)
Database.SetInitializer
第一个是一对多,
第二个是多对多
如果表不够多的话,有可能在表非常多,有可能级联已发生错误
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove
modelBuilder.Conventions.Remove
}
如果更改表名[Table(“需要更改的表名”)]必须要引用的命名空间
using System.ComponentModel.DataAnnotations;
[Key] 设置主键
[Required] 不允许为空
[Display(Name ="性别")] 更改MVC里的名字
[StringLength(30,MinimumLength =2)] 设置字段长度和最小值
[DataType(Data.Password)] 表示密码值 * 号
整型类型和DateTime默认不允许为空,字符串允许为空,在类型后面加个?表示允许为空。如 public int? Age{get; set;}
计算属性[NotMapped]:不做映射,数据库不生成对应的类
混合注解[ComplexType]
EF的对象状态 : 游离态 , 持久态 ,瞬时态
瞬时态 :如下
Added(被添加的) 我发生了添加但没有保存,
Modified(被修改的)我发生了修改但没有保存,
Deleted(被删除的)我发生了删除但没有保存
游离态 :如下
Detached表示和数据库没有一点关系,可以认为单机
持久态 :如下
Unchanged 从数据库取出来之后没有任何修改, 可以认为联网。
--------------------------------
添加
public bool Add(T t)
{
Context.Entry(t).State = EntityState.Added;
return Save();
}
修改
public bool Edit(T t)
{
Context.Entry(t).State = EntityState.Modified;
return Save();
}
--------
删除
public bool Remove(int Id)
{
if (GetAll().Any(m => m.Id == Id))
{
GetAll().Single(m => m.Id == Id).IsDeleted = true;
return Save();
}
else
{
throw new Exception("所传ID没有对应实体");
}
}
五态的好处:省略查询操作,直接把内存中的对象改为持久态。前提(内存数据必须和数据库数据一样)
RedirectToAction 重定向
if(ModelState.IsValid) 是否通过效验
[ActionName()] 起别名
[NonAction()]只是请求业务的,不需要展示
JsonResuit 返回Json ,JsonRequestBehavior.AllowGet;
FileResuit 返回文件,return File(路径,文件类型)
RouteValueDiceionary() 返回键值对
EmptyResuit 返回空白结果