准备工作:
工程:core + console
引用包:
Install-Package Microsoft.EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools Install-Package Microsoft.Extensions.Configuration.Json
Sqlserver库:127.0.0.1 MyDB sa xxx
表:MyTable --> ID int primaryKey ……
可以使用Scaffold-DbContext命令生成上下文和实体(此步依赖Microsoft.EntityFrameworkCore.Tools),如下:
Scaffold-DbContext "Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=xxx;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir models
生成的MyDbContext如下:
public partial class MyDBContext : DbContext { public virtual DbSet<MyTable> MyTable { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { //改为读取json配置文件中连接字符串 optionsBuilder.UseSqlServer(Common.configuration.GetSection("connStr").Value); //optionsBuilder.UseSqlServer(@"Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=@sa123;MultipleActiveResultSets=true"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<MyTable>(entity => { entity.Property(e => e.Id).HasColumnName("ID"); entity.Property(e => e.Address) .HasMaxLength(50) .IsUnicode(false); entity.Property(e => e.Name) .HasMaxLength(50) .IsUnicode(false); entity.Property(e => e.Value) .HasMaxLength(50) .IsUnicode(false); }); } }
改为由json配置文件读取连接字符串需引用Microsoft.Extensions.Configuration.Json,当然前提可解析json的包也可以,在console中,json文件属性需设置为“始终复制,内容”,使用如下:
public class Common { public static IConfiguration configuration { get; set; } } //附加配置文件 Common.configuration = new ConfigurationBuilder().Add(new JsonConfigurationSource() { Path = "project.json" }).Build(); //获取配置文件信息 Common.configuration.GetSection("connStr").Value; //获取配置文件信息时转为对象 Common.configuration.GetSection("connStr").Get<string>();
测试程序如下:
class Program { static void Main(string[] args) { Common.configuration = new ConfigurationBuilder().Add(new JsonConfigurationSource() { Path = "project.json" }).Build(); using (MyDBContext context = new MyDBContext()) { var model = context.MyTable.Find(1); var list = context.MyTable.FromSql(new RawSqlString("select * from mytable")).ToListAsync().Result; } Console.ReadKey(); } }