1

我看过这个标题的其他问题,但他们都说要删除表格。我不想删除它,它有重要数据。

相反,我不能让 MVC 首先停止尝试重新创建它吗?我只想读取它的数据并输出它。我只是想像这样输出它:

return View(db.Accounts.ToList());

这是我的模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace MvcApplication1.Models
{
    public class Account
    {
        public int ID { get; set; }
    }

    public class MyDbContext : DbContext
    {
        public DbSet<Account> Accounts { get; set; }
    }
}

如何阻止 MVC 尝试重新创建我的表?

4

3 回答 3

2

正在发生的事情是 MVC 正在检查数据库,并发现您在数据库中没有帐户对象,只有一列,在您的情况下为 ID。所以 MVC 正在尝试为您创建该对象。为了使用现有的表结构,您需要做的是使您的对象与数据库中已有的相匹配。

您还可以创建一个临时数据库并仅使用一个属性(列)创建您的对象。这使您可以查看连接字符串是否正确。

于 2013-02-06T19:54:21.430 回答
2

尝试通过覆盖OnModelCreating()上下文类中的方法将您的帐户类映射到现有表

public class MyDbContext : DbContext
{
    public DbSet<Account> Accounts { get; set; }

    protected override void OnModelCreating( DbModelBuilder modelBuilder )
    {
        modelBuilder.Entity<Account>( ).ToTable( "dbo.Accounts" );
        //and perhaps the columns as well
        modelBuilder.Entity<Account>( ).Property( p => p.Id )
                                       .HasColumnName( "Id" );
}

这应该告诉 Entity Framework 使用您现有的表,而不是尝试创建一个新表。不必映射每一列。

确保传递给ToTable()andHasColumnName()方法的字符串与数据库中的字符串完全匹配。

于 2013-02-06T19:56:46.940 回答
1

在 Global.asax 中将以下行放入 Application_Start()

Database.SetInitializer(null);

这将阻止创建我希望有帮助的表格

于 2013-10-07T15:57:59.723 回答