本文程序基于VS2015、EF6.1,本文不做过多深入讨论,只是个入门。

EF 就是微软的 EntityFramework,主要分为 DB First,Model First,Code First。之前也只是简单的用 DB First,后来发现 Code First 才是大势所趋,毕竟对于 Coder 来说代码实现更好点,而且迁移很好用。

首先是程序结构

一、Models

先弄2个Model,对应于2张表的结构

 public class UserModel
     {
         public int Id { get; set; }
         public string Name { get; set; }
         public int Age { get; set; }
         public virtual ICollection<ProductModel> Products { get; set; }
     }
 public class ProductModel
     {
         public int Id { get; set; }
         public string Name { get; set; }
     }

二、Mapping

这里主要是设置每个字段的一些限制,比如是否可为空,外键关系啊等等,有些人喜欢写在 Context 的 OnModelCreating 里,但是我还是喜欢单独写成 Mapping 里,这样更清晰一些

 public class UserModelMap : EntityTypeConfiguration<UserModel>
     {
         public UserModelMap()
         {
             //this.ToTable("dbo.User");
             this.HasKey(u => u.Id);

             this.Property(u => u.Name).IsRequired();
             this.HasMany(u => u.Products);
         }
     }
 public class ProductModelMap : EntityTypeConfiguration<ProductModel>
     {
         public ProductModelMap()
         {
             this.HasKey(p => p.Id);

             this.Property(p => p.Name).IsRequired();
         }
     }

三、Context

先在 App.config 里添加一个连接字符串,请注意正常的 SqlServer 和 LocalDB 连接字符串不一样

<connectionStrings>

<add name="EFCodeFirst"connectionString="Server=.;Database=EFCodeFirst;Integrated Security=SSPI"providerName="System.Data.SqlClient"/>

</connectionStrings>

创建一个 Context

 public class EFContext : DbContext
     {
         public DbSet<UserModel> Users { get; set; }

         public DbSet<ProductModel> Products { get; set; }

         public EFContext()
             : base("name=EFCodeFirst")
         {

         }

         protected override void OnModelCreating(DbModelBuilder modelBuilder)
         {
             base.OnModelCreating(modelBuilder);
             //modelBuilder.Entity<UserModel>()

             modelBuilder.Configurations.Add(new UserModelMap());
             modelBuilder.Configurations.Add(new ProductModelMap());
         }
     }

四、创建

运行后就可以创建一个数据库了

五、迁移

开发过程中总是会改数据库的,所以就需要用到迁移

在 Package Manager Console 中执行 Enable-Migrations,然后目录中就会出现 Migrations 文件夹了

每次执行迁移时都会生成一个文件,可以用来恢复,这样也有个记录,我觉得这点还是很强大的

六、常用的命令

从网上找到的,不全

安装EF

PM> Install-Package EntityFramework  Or  NuGet

启用Migrations

PM> Enable-Migrations -EnableAutomaticMigrations

添加Migration

PM> Add-Migration InitialCreate(名字)

更新

PM> Update-Database -Verbose

获取指定版本

PM> Update-Database –TargetMigration:"201606220937315_InitialCreate.cs"(名字)

最新文章

  1. sqlserver索引与查询优化
  2. gulp学习笔记1
  3. CPPUTest 单元测试框架(针对 C 单元测试的使用说明)
  4. linux下对普通用户设置文件访问控命令之setfacl
  5. 【转】shell脚本调试(bash trap support bashdb )
  6. 整理 C#(同步调用、异步调用、异步回调)
  7. Repeater控件实现数据绑定,并实现分页效果
  8. POJ 1759 Garland(二分答案)
  9. Oracle12C 怎样导入scott用户
  10. 单例模式与静态变量在PHP中
  11. go defer (go延迟函数)
  12. mysql的conv的用法
  13. C语言二维数组实现扫雷游戏
  14. 什么是TLB?
  15. TopCoder Div2
  16. 初学Python——文件操作
  17. BAT特殊字符
  18. 转载:MongoDB之旅(超赞,适合初学者)
  19. 10.29 scrum meeting newbe软件团队工作分配
  20. [DeeplearningAI笔记]序列模型2.6Word2Vec/Skip-grams/hierarchical softmax classifier 分级softmax 分类器

热门文章

  1. IOS 中frame与bounds的区别
  2. Java各种类型占用的字节数
  3. XAMPP Apache服务器解析php页面汉字乱码的解决
  4. Java 多线程-上课总结
  5. linux初学 :简易的shell脚本
  6. IE浏览器部分版本不支持opacity透明度属性问题
  7. 转: Android入门及效率开发
  8. 获取input中的值
  9. 总结——visibility和display
  10. sublime text配置