VS2017实体框架6 - 我的桌子在哪里?

时间:2018-04-08 19:48:50

标签: .net sql-server asp.net-mvc entity-framework-6

我在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-MigrationUpdate-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”正确设置......我只是不知道在哪里...

1 个答案:

答案 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");
    }
}