標籤:
Linux用的是Ubuntu,dnx版本是1.0.0-beta6-12120,EF版本是7.0.0-beta5。
以下是用Entity Framework 7產生SQL Server資料庫的操作步驟。
在project.json中添加Entity Framework 7的引用:
{ "dependencies":{ "EntityFramework.SqlServer": "7.0.0-beta5", "EntityFramework.Commands": "7.0.0-beta5" }}
定義實體類,比如:
namespace CNBlogs.AboutUs.Models{ public class TabNav { public int Id { get; set; } public string Title { get; set; } public string Url { get; set;} public bool IsActive { get; set; } }}
定義DbContext,比如:
using Microsoft.Data.Entity;using CNBlogs.AboutUs.Models;namespace CNBlogs.AboutUs.Data{ public class EfDbContext : DbContext { public DbSet<TabNav> TabNavs { get; set; } }}
在config.json中添加資料庫連接字串:
{ "Data": { "ConnectionString": "[資料庫連接字串]" }}
在Startup.cs中載入config.json中的配置:
public Startup(IApplicationEnvironment appEnv){ Configuration = new Configuration(appEnv.ApplicationBasePath) .AddJsonFile("config.json");}public IConfiguration Configuration { get; set; }
註:
1)需要添加命令空間Microsoft.Framework.ConfigurationModel與Microsoft.Framework.Runtime;
2)當時由於沒有正確載入config.json,遇到了 No data stores are configured問題。
在Startup.cs中配置EF:
public void ConfigureServices(IServiceCollection services){ services.AddMvc(); services.AddEntityFramework() .AddSqlServer() .AddDbContext<EfDbContext>(options => { options.UseSqlServer(Configuration.Get("Data:ConnectionString")); });}
註:需要引用命名空間Microsoft.Data.Entity。
在project.json中添加ef command以使用EF的遷移功能產生資料庫。
{ "commands":{ "ef": "EntityFramework.Commands"}
安裝所需要的包包:
dnu restore
用ef命令進行資料庫的產生:
dnx . ef migration add FirstMigrationdnx . ef migration apply
產生成功!
【遺留問題】
以上的操作是使用基於mono的dnx完成的,使用基於corelcr的dnx會出現下面的問題:
System.PlatformNotSupportedException: This platform does not support getting the current color. at System.ConsolePal.get_ForegroundColor() at Microsoft.Data.Entity.Commands.Utilities.ConsoleCommandLogger.WriteVerbose(String message)
這是由於corefx的ConsolePal.Unix.cs中沒有實現ForegroundColor屬性的get操作。
.NET跨平台:在Linux上基於ASP.NET 5用EF7產生資料庫