[英]There is already an object named 'Account' in the database error in asp .net core
[英]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.