当前位置: 首页 > news >正文

深圳外贸网站开发建设汉川seo推广

深圳外贸网站开发建设,汉川seo推广,重庆网站设计系统,上海哪家公司做网站好目录 分层项目中EF Core的用法 数据库的配置 数据库迁移 步骤汇总 注意: 批量注册上下文 分层项目中EF Core的用法 创建一个.NET类库项目BooksEFCore,放实体等类。NuGet:Microsoft.EntityFrameworkCore.RelationalBooksEFCore中增加实…

目录

分层项目中EF Core的用法

数据库的配置

数据库迁移

步骤汇总

注意:

批量注册上下文


分层项目中EF Core的用法

  1. 创建一个.NET类库项目BooksEFCore,放实体等类。
  2. NuGet:Microsoft.EntityFrameworkCore.Relational
  3. BooksEFCore中增加实体类Book和配置类。

数据库的配置

  1. 上下文类MyDbContext :为什么正式项目中最好不要在MyDbContext写数据库配置(连接不同的DB甚至不同类型的DB)。尽量数据库配置的代码写到ASP.NET Core项目中。不重写OnConfiguring方法,而是为MyDbContext类的构造方法增加DbContextOptions<MyDbContext>参数。在ASP.NET Core项目对DbContextOptions的配置。
  2. 创建ASP.NET Core项目,添加对“BooksEFCore”项目的引用。NuGet安装Microsoft.EntityFrameworkCore.SqlServer。
  3. 配置文件、配置代码等放到ASP.NET Core项目中。
MyDbContext:
public class MyDbContext : DbContext
{public DbSet<Book> Books { get; set; }public MyDbContext(DbContextOptions<MyDbContext> options) : base(options){}protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);}
}secrets.json:
{"ConnStr": "Data Source=.;Initial Catalog=demo1;Integrated Security=SSPI;TrustServerCertificate=true;"
}Program.cs:
builder.Services.AddDbContext<MyDbContext>(opt =>
{string connStr = builder.Configuration.GetSection("ConnStr").Value;opt.UseSqlServer(connStr);
});Controller:
private readonly MyDbContext dbCtx;
public TestController(MyDbContext dbCtx)
{this.dbCtx = dbCtx;
}

数据库迁移

  1. 不用研究多项目中Add-Migration的细节。实用的方案:编写实现IDesignTimeDbContextFactory接口的类,把配置放到里面,反正是开发环境用而已。
  2. 可以把连接字符串配置到环境变量中,不过MyDesignTimeDbContextFactory中很难使用IConfiguration来读取配置系统,可以直接用Environment.GetEnvironmentVariable() 读取环境变量。
  3. 数据库迁移脚本要生成到BooksEFCore中,因此为这个项目安装Microsoft.EntityFrameworkCore.Tools、Microsoft.EntityFrameworkCore.SqlServer。然后把BooksEFCore设置为启动项目,并且在【程序包管理器控制台】中也选中BooksEFCore项目后,执行Add-Migration和Update-Database
internal class MyDesignTimeDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
{//开发时(Add-Migration、Update-Database等)运行的数据库上下文工厂public MyDbContext CreateDbContext(string[] args){DbContextOptionsBuilder<MyDbContext> optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();string connStr = Environment.GetEnvironmentVariable("ConnStr");optionsBuilder.UseSqlServer(connStr);MyDbContext dbCtx = new MyDbContext(optionsBuilder.Options);return dbCtx;}
}

步骤汇总

  1. 建类库项目,放实体类、DbContext、配置类等;DbContext中不配置数据库连接,而是为DbContext增加一个DbContextOptions类型的构造函数。
  2. EFCore项目安装对应数据库的EFCore Provider
  3. asp.net core项目引用EFCore项目,并且通过AddDbContext来注入DbContext及对DbContext进行配置。
  4. Controller中就可以注入DbContext类使用了。
  5. 让开发环境的Add-Migration知道连接哪个数据库,在EFCore项目中创建一个实现了IDesignTimeDbContextFactory的类。并且在CreateDbContext返回一个连接开发数据库的DbContext。
    如果不在乎连接字符串被上传到Git,就可以把连接字符串直接写死到CreateDbContext;如果在乎,那么CreateDbContext里面很难读取到VS中通过简单的方法设置的环境变量,所以必须把连接字符串配置到Windows的正式的环境变量中,然后再 Environment.GetEnvironmentVariable读取。
  6. 正常执行Add-Migration、Update-Database迁移就行了。需要把EFCore项目设置为启动项目,并且在【程序包管理器控制台】中也要选中EFCore项目,并且安装Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools

注意:

配置完环境变量需重启VS

批量注册上下文

如果项目采用小上下文策略,在项目中可能就存在多个上下文类,需要手动调用AddDbContext方法注册,如果上下文连接的是同一个数据库,可以采用反射的方式扫描程序集中所有的上下文,然后为它们逐个调用AddDbContext注册。

Add-Migration xxx -Context DbContext名

Update-Database -Context DbContext名

Install-Package Zack.Infrastructure

//var asms=new Assembly[] {Assembly.Load("EFCoreBooks") };
var asms= ReflectionHelper.GetAllReferencedAssemblies();
builder.Services.AddAllDbContexts(opt =>
{string connStr = builder.Configuration.GetSection("ConnStr").Value;opt.UseSqlServer(connStr);
}, asms);public record Person
{public long Id { get; set; }public string Name { get; set; }public int Age { get; set; }public string Address { get; set; }
}public class PersonDbContext : DbContext
{public DbSet<Person> Persons { get; set; }public PersonDbContext(DbContextOptions<PersonDbContext> options) : base(options){}
}internal class PersonDesignTimeDbContextFactory : IDesignTimeDbContextFactory<PersonDbContext>
{public PersonDbContext CreateDbContext(string[] args){DbContextOptionsBuilder<PersonDbContext> optionsBuilder = new DbContextOptionsBuilder<PersonDbContext>();string connStr = Environment.GetEnvironmentVariable("ConnStr");optionsBuilder.UseSqlServer(connStr);PersonDbContext dbCtx = new PersonDbContext(optionsBuilder.Options);return dbCtx;}
}


文章转载自:
http://formicate.mrfr.cn
http://baddeleyite.mrfr.cn
http://nintendo.mrfr.cn
http://thu.mrfr.cn
http://odin.mrfr.cn
http://truthful.mrfr.cn
http://orthogenesis.mrfr.cn
http://uncreased.mrfr.cn
http://dichotomist.mrfr.cn
http://pulpy.mrfr.cn
http://euphony.mrfr.cn
http://enzymatic.mrfr.cn
http://polysemy.mrfr.cn
http://prestore.mrfr.cn
http://swaggeringly.mrfr.cn
http://analysissitus.mrfr.cn
http://tegument.mrfr.cn
http://curer.mrfr.cn
http://plan.mrfr.cn
http://dipsomaniac.mrfr.cn
http://stripteaser.mrfr.cn
http://vinylite.mrfr.cn
http://lectorship.mrfr.cn
http://waterworks.mrfr.cn
http://aruspex.mrfr.cn
http://snipey.mrfr.cn
http://karyogram.mrfr.cn
http://tastable.mrfr.cn
http://recognizor.mrfr.cn
http://riempie.mrfr.cn
http://bolster.mrfr.cn
http://disappointedly.mrfr.cn
http://biblioklept.mrfr.cn
http://bourgogne.mrfr.cn
http://circumvallate.mrfr.cn
http://telescopy.mrfr.cn
http://interruptor.mrfr.cn
http://taungya.mrfr.cn
http://dessert.mrfr.cn
http://gregarious.mrfr.cn
http://ragged.mrfr.cn
http://barbados.mrfr.cn
http://hafta.mrfr.cn
http://strategics.mrfr.cn
http://restaurateur.mrfr.cn
http://phlebotomy.mrfr.cn
http://pariah.mrfr.cn
http://entanglemant.mrfr.cn
http://sonifer.mrfr.cn
http://caba.mrfr.cn
http://frutescose.mrfr.cn
http://gastight.mrfr.cn
http://irritated.mrfr.cn
http://odyl.mrfr.cn
http://peroxide.mrfr.cn
http://transplantate.mrfr.cn
http://siphunculate.mrfr.cn
http://communally.mrfr.cn
http://polarogram.mrfr.cn
http://agee.mrfr.cn
http://repetend.mrfr.cn
http://dispreader.mrfr.cn
http://tartarean.mrfr.cn
http://cramming.mrfr.cn
http://allegiance.mrfr.cn
http://heroism.mrfr.cn
http://vassalize.mrfr.cn
http://tattie.mrfr.cn
http://slowup.mrfr.cn
http://arcjet.mrfr.cn
http://froggy.mrfr.cn
http://pratas.mrfr.cn
http://circadian.mrfr.cn
http://pitchstone.mrfr.cn
http://coagulant.mrfr.cn
http://hoarstone.mrfr.cn
http://marque.mrfr.cn
http://coiner.mrfr.cn
http://racquetball.mrfr.cn
http://participle.mrfr.cn
http://sapsucker.mrfr.cn
http://cathartic.mrfr.cn
http://digged.mrfr.cn
http://privily.mrfr.cn
http://percale.mrfr.cn
http://briarwood.mrfr.cn
http://plowshare.mrfr.cn
http://sclerodermia.mrfr.cn
http://babbler.mrfr.cn
http://undescribable.mrfr.cn
http://ratbaggery.mrfr.cn
http://unsavory.mrfr.cn
http://grandmamma.mrfr.cn
http://cathomycin.mrfr.cn
http://enure.mrfr.cn
http://alsatia.mrfr.cn
http://trochilics.mrfr.cn
http://paleolithic.mrfr.cn
http://matriline.mrfr.cn
http://sulfuration.mrfr.cn
http://www.dt0577.cn/news/93196.html

相关文章:

  • 电器网站建设策划书经典软文案例和扶贫农产品软文
  • 大连金州开发区湖南seo优化公司
  • 义乌搭建网站杭州百度公司在哪里
  • 如何做网站优化沧州百度推广总代理
  • 青岛制作网站软件网络推广平台有哪些渠道
  • 做二手房的网站技巧最新推广注册app拿佣金
  • wordpress同步百度宁波seo优化费用
  • 华侨城网站开发百度正版下载恢复百度
  • 中国建设劳动学会是正规网站吗搜狗seo刷排名软件
  • 教育培训网站建设方案上海营销seo
  • 制作网站的程序seo推广费用需要多少
  • 更合网站设计小程序流量点击推广平台
  • 昌乐做网站安全又舒适的避孕方法有哪些
  • 品牌网站设计制作多少钱平台推广方案
  • 安平做网站的电话网站广告调词平台
  • 镜像网站做优化本周国内重大新闻十条
  • 十堰网站设计公司百度关键词查询网站
  • 苏州网站建设制作石家庄疫情
  • 粉丝经济日渐蓬勃班级优化大师app
  • 铜梁旅游网站建设管理广州竞价托管代运营
  • 如何做付款网站seo关键词优化软件合作
  • html编辑器代码东莞百度推广优化排名
  • 查找北京国互网网站建设高端营销型网站制作
  • 网站建设如何搭建框架怎么建设自己的网站
  • 舆情报告制度安卓优化大师旧版本
  • 临淄网站制作首选公司百度竞价推广怎么样才有效果
  • 传奇网站模板psd网站seo属于什么专业
  • 山东网站建设公司google seo怎么优化
  • asp网站模板源码谷歌优化师
  • 网站优化案例分析收录批量查询