繁体   English   中英

数据库(ASP.NET MVC)中已经有一个名为“ Accounts”的对象

[英]Already an object named “Accounts” in the database (ASP.NET MVC)

我看了其他与此标题相关的问题,但他们都说要删除该表。 我不想删除它,它具有重要的数据。

相反,我不能让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尝试重新创建表?

发生的情况是,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" );
}

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

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

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

Database.SetInitializer(null);

这将阻止创建表,希望对您有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM