我在SQL Server中有一个现有的数据库,所以我创建了一个新的C#ASP.NET MVC项目并更新了web.config
以指向现有的数据库(实际上只保存了当前的AspNetXxxx表集)。
我创建了一些模型类:
public class Project
{
[Key]
public int Id { get; set; }
public string ProjectName { get; set; }
public string ProjectType { get; set; }
public DateTime created { get; set; }
}
public class Portfolio
{
[Key]
public int Id { get; set; }
public string PortfolioName { get; set; }
public List<Project> Projects { get; set; }
}
public class PortfolioContext : DbContext
{
public DbSet<Project> Projects { get; set; }
public DbSet<Portfolio> Portfolios { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Project>()
.Property(p => p.Id)
.HasColumnName("ProjId");
modelBuilder.Entity<Portfolio>()
.Property(p => p.Id)
.HasColumnName("PortId");
}
}
然后我使用程序包管理器控制台:Enable-Migrations
(使用ContextType
PortfolioContext
Add-Migration
,Update-Database
,然后PortfolioController
。
我还创建了相关的 public override void Up()
{
CreateTable(
"dbo.Portfolios",
c => new
{
PortfolioId = c.Int(nullable: false, identity: true),
PortfolioName = c.String(),
})
.PrimaryKey(t => t.PortfolioId);
CreateTable(
"dbo.Projects",
c => new
{
ProjectId = c.Int(nullable: false, identity: true),
ProjectName = c.String(),
ProjectType = c.String(),
created = c.DateTime(nullable: false),
Portfolio_Id = c.Int(),
})
.PrimaryKey(t => t.ProjectId)
.ForeignKey("dbo.Portfolios", t => t.Portfolio_Id)
.Index(t => t.Portfolio_Id);
}
public override void Down()
{
DropForeignKey("dbo.Projects", "Portfolio_Id", "dbo.Portfolios");
DropIndex("dbo.Projects", new[] { "Portfolio_Id" });
DropTable("dbo.Projects");
DropTable("dbo.Portfolios");
}
和相关视图(使用向导中的现有上下文)。
现有数据库尚未使用新表更新 - 但是当我运行应用程序时,它工作正常,关闭网站并重新打开后,它仍然有我创建的投资组合,因此显然存储某处的细节......但他们在哪里?
查看迁移记录,它具有以下代码:
{{1}}
...所以似乎表格已经与所有者“dbo”正确设置......我只是不知道在哪里...
答案 0 :(得分:0)
感谢(@Bob Lokerse&amp; @Ivan Stoev)的回复。 虽然没有直接回答,但它确实使我能够进一步调查并修复。 进一步的细节有助于:https://msdn.microsoft.com/en-us/data/jj592674.aspx
EF确实在(localdb)上创建了自己的数据库,“Get-Migrations -verbose”允许我找到它。 我需要的是将Context模型的基础更改为指向特定/现有数据库(如下所示) - 这是有效的 - 表是在现有数据库中与我的其他表一起创建的(其中“DefaultConnection”是Web。配置我现有数据库所在的连接字符串:
public class PortfolioContext : DbContext
{
public PortfolioContext()
: base("DefaultConnection")
{
}
public DbSet<Project> Projects { get; set; }
public DbSet<Portfolio> Portfolios { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Project>()
.Property(p => p.Id)
.HasColumnName("ProjId");
modelBuilder.Entity<Portfolio>()
.Property(p => p.Id)
.HasColumnName("PortId");
}
}