1、自定义数据库链接字符串上下文

 public class PetDbContext : DbContext
{
public PetDbContext()
: base("name=DemoDB")
{
}
public DbSet<Dog> Dogs { get; set; }
}

2、Code First 模型迁移相关命令

Enable-Migrations 启用模型迁移,会自动建立Migrations文件夹,里面记录模型修改历史
Add-Migration AddType ,模型添加字段Type后,执行该命令,会生成模型修改历史
Update-Database 将模型的修改应用到数据库中

3、EF 支持的完整注释列表为

4、Entity Framework数据库初始化方式

  Entity Framework通过Database.SetInitializer来指定需要的数据库初始化方式,Database.SetInitializer可指定的数据库共有3种:

  >. CreateDatabaseIfNotExists

  CreateDatabaseIfNotExists是Database.SetInitializer指定数据库的默认方式,用于当数据库不存在时,自动创建数据库。由于该方式是默认方式,所以可以不需要任何代码进行指定,当然也可以使用代码来明确的指定。

Database.SetInitializer(new CreateDatabaseIfNotExists<PetDbContext>());
  >. DropCreateDatabaseWhenModelChanges   DropCreateDatabaseWhenModelChanges用于当数据模型发生改变时,先删除原数据库,后创建新的数据库。 Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PetDbContext>());
  >. DropCreateDatabaseAlways   DropCreateDatabaseAlways用于每次均先删除原数据库再创建新的数据库,不管数据模型是否发生改变。 Database.SetInitializer(new DropCreateDatabaseAlways<PetDbContext>());
  但是,在很多时候,我们希望即使在Entity Framework Code First与数据库不匹配时,宁可Entity Framework Code First报出数据库连接错误,而不希望对数据库进行任何的删除创建操作。Entity Framework Code First提供关闭数据库初始化操作: Database.SetInitializer<PetDbContext>(null);

代码示例:

public class PetDbContext : DbContext
{
static PetDbContext()
{
Database.SetInitializer<PetDbContext>(null);
//Database.SetInitializer(new CreateDatabaseIfNotExists<PetDbContext>());
//Database.SetInitializer(new DropCreateDatabaseAlways<PetDbContext>());
//Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PetDbContext>());
}
public PetDbContext()
: base("name=DemoDB")
{
}
public DbSet<Dog> Dogs { get; set; }
}

5、使用ER进行CRUD操作

实体定义

 public class Dog
{
public int? Age { get; set; }
public Guid Id { get; set; }
public string Name { get; set; }
public float? Weight { get; set; }
public int Type { get; set; }
public DateTime BirthDay { get; set; }
public string Address { get; set; }
}

新增:

using (PetDbContext db = new PetDbContext())
{
var dog = new Dog { Id = Guid.NewGuid(), Name = "杨贵妃", Age = ,Type=,BirthDay=DateTime.Now };
db.Dogs.Add(dog); int cnt = db.SaveChanges();
}

根据ID读取与更新:

using (PetDbContext db = new PetDbContext())
{
var dog = db.Dogs.FirstOrDefault<Dog>(t =>( t.Id == new Guid("3455dcc0-4487-4258-bd76-b158c1c4a551"))); 
if(dog!=null)
{
dog.BirthDay = DateTime.Now;
int cnt = db.SaveChanges();
}
}

删除记录:

 using (PetDbContext db = new PetDbContext())
{ var dog = db.Dogs.FirstOrDefault<Dog>(t =>( t.Id == new Guid("3455dcc0-4487-4258-bd76-b158c1c4a551"))); if(dog!=null)
{
db.Dogs.Remove(dog); int cnt = db.SaveChanges();
}
}

6、多表连接查询示例:

 var list2 = from a in dbContext.Student
join b in dbContext.Course
on a.Id equals b.StudentId
where a.Id ==
select new { a.Name, a.Sex, a.Aage, b.CourseName };
gridView.DataSource = list2.ToList();
gridView.DataBind();

7、使用EF进行批量更新的框架:

https://github.com/loresoft/EntityFramework.Extended

8、Linq中使用like

Linq 还提供了一种方法,叫做SqlMethods.Like,需要先添加System.Data.Linq.SqlClient名称空间。上面的三个可以写成
var q = (from c in db.Customers
where SqlMethods.Like(c.CustomerID, "%ROUT%")

9、存储过程 删除,有几个参数,存储后面要带几个参数以逗号分隔

SqlParameter[] para = new SqlParameter[] {
new SqlParameter("@ID",id)
};
db.Database.ExecuteSqlCommand("sp_Userinfos_deleteByID @ID", para);

10、出现Unable to load the specified metadata resource.

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

改为

connectionString="metadata=res://*/;

https://msdn.microsoft.com/en-us/data/jj200620
https://msdn.microsoft.com/zh-cn/data/ee712907

Entity Framework 学习笔记的更多相关文章

  1. Entity Framework 学习笔记(2)

    上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...

  2. Entity Framework学习笔记

    原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总   之前的小项目做完了,到了总结经验和 ...

  3. ADO.NET Entity Framework学习笔记(3)ObjectContext

    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]   说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...

  4. Entity Framework学习笔记——错误汇总

    之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...

  5. Entity Framework学习笔记——记一个错误解决方式及思路

    继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...

  6. Entity Framework学习笔记——配置EF

    初次使用Entity Framework(以下简称EF),为了避免很快忘记,决定开日志记录学习过程和遇到的问题.因为项目比较小,只会用到EF的一些基本功能,因此先在此处制定一个学习目标:1. 配置EF ...

  7. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  8. Entity Framework学习笔记(三)----CRUD(2)

    请注明转载地址:http://www.cnblogs.com/arhat 昨天晚上老魏配的机器终于到了,可是拿回来之后什么都组装好了,唯独差一个非常重要的组件"电源线",老魏那个汗 ...

  9. Entity Framework学习笔记(二)----CRUD(1)

    请注明转载地址:http://www.cnblogs.com/arhat 这篇文章老魏和大家分享一下Entity Framework的CRUD操作,在这之前呢,老魏先说一下老魏对EF的一个整体的认识, ...

  10. Entity Framework学习笔记(一)

    请注明转载地址:http://www.cnblogs.com/arhat 哈哈!老魏回来了,4月份的内容开始更新了,由于3月份时间都在做项目,没有时间写了,那么4月份老魏会尽可能的多写点东西的.那么4 ...

随机推荐

  1. Objective-C 代码块(block)的使用

    代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...

  2. Android之动态申请权限(API23以上需求)

    API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全. 这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写 ...

  3. 腾讯优测优分享 | 游戏的UI自动化测试可以这样开展

    腾讯优测是专业的自动化测试平台,提供自动化测试-全面兼容性测试,云真机-远程真机租用,漏洞分析等多维度的测试服务,让测试更简单! 对于目前的两大游戏引擎cocos-2dx.unity3D,其UI自动化 ...

  4. 获取select标签选中状态 的label的值。

    <select name="procode" onchange="alert(this.options[this.selectedIndex].text)" ...

  5. js传递json格式对象到服务器

    var message = new Object();message.event = "test";message.params = new Object();message.pa ...

  6. 小米note3,华为手机,软键盘弹出之后,页面上定位的元素布局会乱掉

    原因:可能是因为,软键盘弹出时,改变了height,使height:100%,不能达到原来的高度. 解决办法: $(document).ready(function () { $('body').he ...

  7. MySQL初探

    慕课网http://www.imooc.com/learn/122 课程学习笔记     修改MySQL提示符        shell>mysql --prompt 提示符        my ...

  8. java内存分配--引用

    栈内存  对象地址 堆内存  存放属性 public class TestDemo{ public static void main(String args[]){ Person perA =new ...

  9. java 枚举类型 构造函数及用法

    // 1. 定义枚举类型 public enum Light { // 利用构造函数传参 RED (1), GREEN (3), YELLOW (2); // 定义私有变量 private int n ...

  10. VMvare克隆复制多个操作系统

    目的:完成linux的双机和集群实验 2016-12-06 在网上查找了一些资料现整理如下,以供之后查看和帮助他人. 注意事项: 1.关闭源虚拟机的电源: 操作很简单 选择完整创建 输入源克隆机的用户 ...