Linux用的是Ubuntu,dnx版本是1.0.0-beta6-12120,EF版本是7.0.0-beta5。

以下是用Entity Framework 7生成SQL Server数据库的操作步骤。

在project.json中添加Entity Framework 7的引用:

  1. {
  2. "dependencies":{
  3. "EntityFramework.SqlServer": "7.0.0-beta5",
  4. "EntityFramework.Commands": "7.0.0-beta5"
  5. }
  6. }

定义实体类,比如:

  1. namespace CNBlogs.AboutUs.Models
  2. {
  3. public class TabNav
  4. {
  5. public int Id { get; set; }
  6.  
  7. public string Title { get; set; }
  8.  
  9. public string Url { get; set;}
  10.  
  11. public bool IsActive { get; set; }
  12. }
  13. }

定义DbContext,比如:

  1. using Microsoft.Data.Entity;
  2. using CNBlogs.AboutUs.Models;
  3.  
  4. namespace CNBlogs.AboutUs.Data
  5. {
  6. public class EfDbContext : DbContext
  7. {
  8. public DbSet<TabNav> TabNavs { get; set; }
  9. }
  10. }

在config.json中添加数据库连接字符串:

  1. {
  2. "Data": {
  3. "ConnectionString": "[数据库连接字符串]"
  4. }
  5. }

在Startup.cs中加载config.json中的配置:

  1. public Startup(IApplicationEnvironment appEnv)
  2. {
  3. Configuration = new Configuration(appEnv.ApplicationBasePath)
  4. .AddJsonFile("config.json");
  5. }
  6.  
  7. public IConfiguration Configuration { get; set; }

注:

1)需要添加命令空间Microsoft.Framework.ConfigurationModel与Microsoft.Framework.Runtime;

2)当时由于没有正确加载config.json,遇到了 No data stores are configured问题。

在Startup.cs中配置EF:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMvc();
  4.  
  5. services.AddEntityFramework()
  6. .AddSqlServer()
  7. .AddDbContext<EfDbContext>(options =>
  8. {
  9. options.UseSqlServer(Configuration.Get("Data:ConnectionString"));
  10. });
  11. }

注:需要引用命名空间Microsoft.Data.Entity。

在project.json中添加ef command以使用EF的迁移功能生成数据库。

  1. {
  2. "commands":{
  3. "ef": "EntityFramework.Commands"
  4. }

安装所需要的包包:

  1. dnu restore

用ef命令进行数据库的生成:

  1. dnx . ef migration add FirstMigration
  2. dnx . ef migration apply

生成成功!

【遗留问题】

以上的操作是使用基于mono的dnx完成的,使用基于corelcr的dnx会出现下面的问题:

  1. System.PlatformNotSupportedException: This platform does not support getting the current color.
  2. at System.ConsolePal.get_ForegroundColor()
  3. at Microsoft.Data.Entity.Commands.Utilities.ConsoleCommandLogger.WriteVerbose(String message)

这是由于corefx的ConsolePal.Unix.cs中没有实现ForegroundColor属性的get操作。

【遗留问题解决】

后来通过修改corefx中ConsolePal.Unix.cs的代码,让ForegroundColor返回一个默认颜色。然后将自己编译出来的System.Console.dll复制到dnx-coreclr-linux-x64/bin/中临时解决了问题。

.NET跨平台:在Linux上基于ASP.NET 5用EF7生成数据库的更多相关文章

  1. .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点

    2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...

  2. .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点

    今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...

  3. 使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序

    本文于2019年04月10日将标题「CentOS7 部署 ASP.NET Core应用程序」修改为「使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序」. 环境准备 VMwa ...

  4. 使用 Nginx 在 Linux 上托管 ASP.NET Core

    server { listen 80; server_name example.com *.example.com; location / { proxy_pass http://localhost: ...

  5. 一、netcore跨平台之 Linux上部署netcore和webapi

    这几天闲着的时候在linux上部署了一下netcore webapi,下面就纪要一下这个过程. 中间遇到不少的坑,心里都是泪啊. 话不多说,开始干活. ------------------------ ...

  6. 以self-contained方式在Linux上部署ASP.NET Core站点

    今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...

  7. 在Linux上运行ASP.NET vNext

    最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...

  8. 尝试在Linux上部署Asp.net Core应用程序

    快两个月没接触.net,倒是天天在用Linux,所以想尝试一下在Linux运行喜欢的.net 应用. 安装CentOS 安装.Net core for Linux 创建Asp.net Core应用程序 ...

  9. 使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序

    说在前面 在阅读本文之前,您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解,本文侧重实战,不会对相关概念详述. 同时请确保您本地开发机器已完成如下安装: Docker 18.06 或更 ...

随机推荐

  1. C#之Winform中treeview控件绑定数据库

    private DataSet ds; private SqlDataAdapter sqlDataAdapter1; private int maxnodeid; private void Form ...

  2. asp.net C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集。的解决办法

    asp.net C# 未能加载文件或程序集或它的某一个依赖项.需要强名称程序集.的解决办法 出现这个错误是原因:是有签名的DLL引用了无签名的DLL 如上图所示,就是因为引用Entity.MVCEnt ...

  3. CSS-页面布局

    介绍 几个实现多栏布局的方法.主要介绍使用内部div来创建浮动的栏. 多栏布局有三种基本的实现方案:固定宽度.流动.弹性. 固定宽度布局的大小是随用户调整浏览器窗口大小而变化,一般是900至1100像 ...

  4. nullcon HackIM 2016 -- Programming Question 2

    Your simple good Deeds can save you but your GREED can kill you. This has happened before. This gree ...

  5. 绕过/*,web.xml直接访问jsp

    web.xml中如果配置了/* 全匹配,那么不能用servet去响应页面返回了,因为全都被会/*拦截. <servlet> <servlet-name>validateAuth ...

  6. IP验证

    function isIP(str) { var IP = '(25[0-5]|2[0-4]\\d|1\\d\\d|\\d\\d|\\d)'; var IPdot = IP + '\\.'; var ...

  7. gcc编译时指定链接库的查找目录

    gcc编译时,如果需要链接的库的目录不在标准目录,则需要通过将保护库的目录/aa/bb/cc通过-L/aa/bb/cc 添加到搜索路径中,如: gcc -o xmltest xml_test.cpp ...

  8. java.net.MalformedURLException: Illegal character in URL

    在进行接口测试时,意外发现返回结果报java.net.MalformedURLException: Illegal character in URL,意思是“在URL中的非法字符”,我的参数是经过ba ...

  9. deep learning

    今天跑一个模型,程序都没变,就配置文件变了.但是总是很快就显示loss为nan. 检查配置文件还是不行,把其中loss改为0还是不行.最后搁置了一下,再回头对比一下电脑上的和服务器上的,发现一个配置文 ...

  10. Selenium简单介绍

    WEB自动化测试:指WEB应用系统从用户界面层面进行的自动化测试.通过用户界面测试内部的业务逻辑. 自身特点:(一)WEB页面上出现的元素有可能具有不确定性: (二)不同操作系统上不同WEB浏览器之间 ...