一、前言
久闻EF大名,之前做C/S产品用的是Dapper对SqlLite进行ORM。然后接触公司授权系统后发现用的是EntityFramework对SQLSever进行ORM。授权系统里用的是DBFirst,增删查改使用Linq To Entity,觉得非常方便。本篇篇幅较短,老司机可直接略过
二、添加EF
Step1:添加“新建项”,起个名称,添加ADO.NET实体数据模型;
Step2:选择模型类型,来自数据库的EF设计器;
Step3:选择数据连接,新建连接,选择要使用的数据库类型;默认SQLSever;
Step4:测试连接数据库;
Step5:选择EF版本;
Step6:选择要实体化的表,点击完成。
三、操作
经过上述操作会产生三个文件:
1. EntityModel.Context.tt (上下文,所有class的DBSet集合都在这个文件下的.cs文件中)
2. EntityModel.tt (每个表映射后的class都放在这个文件下面)
3. EntityModel.edmx (可视化的表设计器)
假设连接的数据库下有三个表:AgencyInfo,ContractInfo,CustomerInfo。那么EntityModel.tt下就会有三个对应的.cs文件:
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Collections.Generic; namespace HHH { public partial class AgencyInfo { public System.Guid ID { get; set; } public string UnitName { get; set; } public string Phone { get; set; } public string Address { get; set; } public string comments { get; set; } public Nullable<System.DateTime> CreatTime { get; set; } public Nullable<int> ShowFlag { get; set; } } }
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Collections.Generic; namespace HHH { public partial class ContractInfo { public System.Guid ID { get; set; } public string Title { get; set; } public string Comment { get; set; } public Nullable<System.DateTime> CreateDate { get; set; } } }
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Collections.Generic; namespace HHH { public partial class CustomerInfo { public System.Guid ID { get; set; } public string Name { get; set; } public string ContactInfo { get; set; } public string Address { get; set; } public string Comments { get; set; } public string Email { get; set; } public string MobilePhone { get; set; } public string province { get; set; } public string City { get; set; } public string Type { get; set; } public Nullable<System.DateTime> CreateDate { get; set; } } }
那么EntityModel.Context.tt是这样的:
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; namespace HHH { public partial class MyEntities: DbContext { public MyEntities() : base("name=MyEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public DbSet<ContractInfo> ContractInfoes { get; set; } public DbSet<CustomerInfo> CustomerInfoes { get; set; } public DbSet<AgencyInfo> AgencyInfoes { get; set; } } }
需要对表对象操作时,首先要:
private MyEntities dbContext = new MyEntities();
需要对哪个表操作,就dbContext.ContractInfoes或者dbContext.CustomerInfoes这样找到数据集合,然后用Linq去操作,最后别忘dbContext.SaveChanges()保存修改即可。
四、结尾
明天再看看写点什么,保持学习进度,再过几天要去练车了