C# 已存在名为“的对象”;“帐户”;在数据库中(ASP.NET MVC)

C# 已存在名为“的对象”;“帐户”;在数据库中(ASP.NET MVC),c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我已经看了这个标题的其他问题,但他们都说删除表。我不想删除它,它有重要的数据 相反,我能不能让MVC从一开始就停止尝试重新创建它?我只想读取它的数据并输出它。我只是想这样输出它: return View(db.Accounts.ToList()); 这是我的模型: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; name

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

相反,我能不能让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; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Data.Entity;
名称空间MVCAPApplication1.Models
{
公共类帐户
{
公共int ID{get;set;}
}
公共类MyDbContext:DbContext
{
公共数据库集帐户{get;set;}
}
}

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

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


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

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


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

通过覆盖上下文类中的
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" );
}
公共类MyDbContext:DbContext
{
公共数据库集帐户{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“dbo.Accounts”);
//也许还有柱子
modelBuilder.Entity().Property(p=>p.Id)
.姓名(“Id”);
}
这应该告诉实体框架使用您现有的表,而不是尝试创建一个新表。映射每个列应该是不必要的


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

通过重写上下文类中的
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" );
}
公共类MyDbContext:DbContext
{
公共数据库集帐户{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“dbo.Accounts”);
//也许还有柱子
modelBuilder.Entity().Property(p=>p.Id)
.姓名(“Id”);
}
这应该告诉实体框架使用您现有的表,而不是尝试创建一个新表。映射每个列应该是不必要的


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

在Global.asax中,在应用程序\u Start()中放入以下行

Database.SetInitializer(null)

这将阻止创建表
我希望这对Global.asax中的

有所帮助,在应用程序_Start()中添加以下行

Database.SetInitializer(null)

这将阻止创建表

我希望这有帮助

您是否使用实体框架?我有一个现成的ASP.NET MVC 4应用程序。我不想先使用代码,因为我的数据库已经建立。我不确定是否使用EF…您的account对象以何种方式与数据库中的accounts表匹配?我在数据库中的表是
accounts
,并且有更多的字段。我只想通过只列出
ID
字段来测试它。这不可能吗?@user1477388可以使用两个不同的“数据库”吗?您正在使用实体框架吗?我有一个现成的ASP.NET MVC 4应用程序。我不想先使用代码,因为我的数据库已经构建好了。我不确定我是否在使用EF…您的account对象以何种方式与数据库中的accounts表匹配?我的数据库中的表是
accounts
,它有很多字段我只想通过只列出
ID
字段来测试它。这不可能吗?@user1477388你能使用两个不同的“数据库”吗哦,糟糕!我怕会有这种情况;这个表有很多字段我必须手动输入。无论如何,是否有必要快速地把所有字段输入到我的模型中去?好主意,罗伯特。我会考虑这么做的。谢谢。确切地说。我指的是你可以使用另一个模式或数据库来获得你的蛋糕。D也吃它。但是,罗伯特的要点基本上。好了,+1AHH,我明白了。谢谢,Dave A.哦,废话!我担心情况会是这样的,这个表有一大堆的字段我必须手动输入。无论如何,要快速地把所有字段输入到我的模型中去吗?避开这个问题。好主意,罗伯特。我会考虑这样做。谢谢。事实上。我曾指出,你可以使用另一个模式或db来吃蛋糕。但是@Robert的观点基本上是正确的。好吧,我明白了。谢谢,Dave A。谢谢,我不确定它是否有效,因为我只是使用了一个更简单的表,或者使用了这个表,但看起来这是一个好主意。谢谢,我不确定它是否有效因为我只是用了一个更简单的表格,或者用了这个表格,但看起来这是个好主意。