VS2017 Entity Framework 6:自定义模型对应的数据表在哪里?
Hey there,我看你已经有了带AspNetXxxx系列表的现有数据库,也创建了Project和Portfolio模型,但数据库里没生成对应的表对吧?这是Code First模式下的典型情况——Entity Framework不会自动把模型同步到数据库,得手动走迁移流程,下面一步步来解决:
1. 先确认DbContext配置是否正确
首先得确保你有一个继承自DbContext的上下文类,并且把你的两个模型添加为DbSet属性,这样EF才知道要处理它们。举个示例:
using System.Data.Entity; using YourProject.Models; // 替换成你实际的模型所在命名空间 public class ApplicationDbContext : DbContext { // 这部分是Identity自带的用户/角色表上下文,不用修改 public DbSet<ApplicationUser> Users { get; set; } public DbSet<IdentityRole> Roles { get; set; } // 添加上你的模型对应的DbSet public DbSet<Project> Projects { get; set; } public DbSet<Portfolio> Portfolios { get; set; } // 构造函数里的连接字符串名称要和web.config里的完全一致! public ApplicationDbContext() : base("DefaultConnection") { } }
划重点:
base("DefaultConnection")里的名称必须和web.config中<connectionStrings>节点里的连接字符串name完全匹配,不然EF找不到对应的数据库。
2. 启用迁移功能
打开Visual Studio的包管理器控制台(路径:工具 → NuGet包管理器 → 包管理器控制台),输入以下命令并回车:
Enable-Migrations
执行成功后,你的项目里会多出一个Migrations文件夹,里面包含Configuration.cs迁移配置文件。
3. 生成迁移脚本
接着在包管理器控制台输入:
Add-Migration AddProjectsAndPortfoliosTables
这里的AddProjectsAndPortfoliosTables是迁移的自定义名称,你可以取个能清晰描述本次操作的名字(比如InitialProjectPortfolioSetup)。执行后,Migrations文件夹里会新增一个带时间戳的C#类,里面包含了创建Projects和Portfolios表的SQL逻辑,你可以打开确认一下内容。
4. 将迁移应用到数据库
最后一步,执行命令让EF把这些变更同步到你的SQL Server数据库:
Update-Database
等命令执行完成,去你的SQL Server数据库里刷新一下,就能看到Projects和Portfolios这两张表啦!
额外注意事项
- 不用担心迁移会影响现有AspNetXxxx表的数据——EF只会新增你模型对应的表,不会改动已有表的结构或数据。
- 如果执行
Update-Database时报错,优先检查这几点:web.config的连接字符串是否正确、SQL Server服务是否在运行、你的数据库账号有没有创建表的权限。 - 如果你不想用迁移,也可以手动在数据库里创建对应的表,但还是推荐用迁移——以后修改模型(比如新增字段、调整字段类型)时,只需要再跑一遍
Add-Migration和Update-Database就能同步到数据库,非常省心。
内容的提问来源于stack exchange,提问作者Woody

