(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:我开始把ASP.NET 5用于生产系统开发已经有1个多月了,也填了一些坑积累了一些经验,从今天开始会陆陆续续分享给大家。

众所周知,虽然Visual Studio 2015已经进入RC了,ASP.NET 5整体上还处于beta4,所以不可避免会有很多坑。也由于ASP.NET 5的文档还不完善,所以我觉得有必要把自己的一些近一个月来使用ASP.NET 5开发产品的教训、经验或小技巧分享给大家。今天先分析两个话题。

一、在Azure的Web App(aka WebSite)中如何配置连接字符串

在之前的ASP.NET中,连接字符串是放到web.config中的ConnectionStrings下,如果Web应用部署到Azure Web App后,在Web App的配置中,填入名称相同的真实(正式)的连接字符串,在运行的时候会自动覆盖(替换)web.config中的值。

在ASP.NET 5同样也可以如法炮制,只是细节有所不同。由于在ASP.NET 5里,引入了新的配置基础结构,比如连接字符串一般配置到config.json文件的“Data:XXX:ConnectionString”,”XXX”是连接字符串的名称。所以在Azure的配置中,也只需要填写同名“XXX”的连接字符串即可。唯一遵循的约定就是连接字符串必须放到“Data:XXX:ConnectionString”中。

二、如何在独立的Class Library项目中执行Entity Framework 7的数据迁移

之前的文章介绍过如何执行Entity Framework 7的数据迁移,但是假如数据模型的类和DbContext在独立的Class Library项目中又要如何处理呢。或者说,你在独立的项目(非Web主项目,其一般包含config.json和Startup.cs)中执行“dnx . ef migration”相关命令的时候,报一个“DbContext no data storee configured”的错误,要怎么办?

其实,也很简单,只是稍微多做一步。当然首先在独立的项目中要完成基本的EF7数据迁移配置(见之前的文章)。然后,在独立的项目中也添加一个config.json文件,仅仅包含DbContext所用的“Data:XXX:ConnectionString”配置,这里的连接字符串的内容最好和主Web项目一致。再添加一个Startup.cs文件,里面仅仅包含加载配置信息和配置实体框架的代码。如下所示:

 public class Startup
{
public void Configure(IApplicationBuilder app)
{
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
var configuration = new Configuration()
.AddJsonFile("config.json"); Configuration = configuration;
} public IConfiguration Configuration { get; private set; } public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<CoreDbContext>(options =>
options.UseSqlServer(Configuration["Data:core:ConnectionString"]));
}
}

需要这样做的原因在于,project.json中的“ef”命令依然会完整启动整个应用程序(Class Library项目作为启动项)。这一点和EF6之前的版本有着很大不同。

【更新:2015-07-04】

上面的源代码有些错误,应该是下面的(使用ASP.NET 5 beta5):

using Microsoft.AspNet.Hosting;
using Microsoft.Data.Entity;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection; namespace EIPCore.Models
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
var builder = new ConfigurationBuilder()
.AddJsonFile("config.json"); Configuration = builder.Build();
} public static IConfiguration Configuration { get; private set; } public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<CoreDbContext>(options =>
options.UseSqlServer(Configuration["Data:core:ConnectionString"]));
}
}
}

ASP.NET 5探险(1):Azure中配置连接字符串、独立项目执行EF7数据迁移的更多相关文章

  1. ASP.NET MVC 5 学习教程:创建连接字符串

    原文 ASP.NET MVC 5 学习教程:创建连接字符串 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  2. .NET Core 获取数据库上下文实例的方法和配置连接字符串

    目录 .NET Core 获取数据库上下文实例的方法和配置连接字符串 ASP.NET Core 注入 .NET Core 注入 无签名上下文 OnConfigure 配置 有签名上下文构造函数和自己n ...

  3. EF中的连接字符串

    映射视图是每个实体集和关联的映射中指定的可转换的可执行表示. 包括两部分: 查询视图 表示从数据库架构转到概念架构所需的规范装换 更新视图 表示从概念模型转到数据库架构所需的规范转换 如果应用程序仅用 ...

  4. ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...

  5. 转载:ASP.NET Core 在 JSON 文件中配置依赖注入

    在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.Stri ...

  6. 在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串

      1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName&q ...

  7. ASP.NET web.config中的连接字符串

    在ASP.NET的web.config中,可以用两种方式来写连接字符串的配置. <configuration> <appSettings> <add key=" ...

  8. eclipse中配置maven的web项目

    提高效率,一般都会使用IED如eclipse来帮助开发.eclipse中单独建立一个web项目或者是maven项目是可以通过插件很容易完成的,但是如果要结合2者,就需要先建立一个,然后再转换或使原型. ...

  9. 在Tomcat中配置连接池和数据源

    1.DataSource接口介绍 (1)DataSource 概述 JDBC1.0原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource ...

随机推荐

  1. redis配置文件redis.conf参数说明

    redis配置文件redis.conf参数说明 (2013-01-09 21:20:40)转载▼ 标签: redis配置 redis.conf 配置说明 杂谈 分类: nosql # By defau ...

  2. IntelliJ IDEA License Server本地搭建教程

    Licence地址直接填入 http://idea.qinxi1992.cn/ http://jetbrains.tencent.click 直接破解 本地教程: 2016年3月20日更新支持自定义端 ...

  3. linux上进程状态查询

    linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有 ...

  4. CSS position relative absolute fixed

    position属性absolute与relative 详解   最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻 ...

  5. UIImage 在某些控件上被放大问题

    今天用到了UISlider,想利用slider.setThumbImage(UIImage(named:"aaa"), forState: UIControlState.Norma ...

  6. redis pub/sub 实战: 微信语音识别

    2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明so ...

  7. 9. javacript高级程序设计-客户端检测

    1. 客户端检测 1.1 能力检测 在编写代码之前先检测特定浏览器的能力. 1.2 怪癖检测 怪癖实际上是浏览器实现中的bug 1.3 用户代理检测 通过检测用户代理字符串来识别浏览器.用户代理字符串 ...

  8. Effective C++ -----条款51:编写new 和delete 时需固守常规

    operator new 应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new-handler.它也应该有能力处理0 bytes 申请.Class专属版本则还应该处理“比 ...

  9. 利用冒泡对List排序

    SysMenu是List集合中的类型,在这是一个菜单实体. public List<SysMenu> selfMenuSort(List<SysMenu> list) { fo ...

  10. 【leetcode】Subsets II (middle) ☆

    Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...