无效的对象名称“dbo.UserRoles”
Posted
技术标签:
【中文标题】无效的对象名称“dbo.UserRoles”【英文标题】:Invalid object name 'dbo.UserRoles' 【发布时间】:2013-09-10 17:55:45 【问题描述】:我收到此错误:[SqlException (0x80131904): Invalid object name 'dbo.UserRoles'.],但我无法找到错误所在。我可以从其他表中检索其他数据,但不是这个。
条件是:
web.config 中的连接字符串:
<add name="myStoreConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\myStore.mdf';Integrated Security=True" providerName="System.Data.SqlClient" />
上下文:
public class AdminMyStoreConnection : DbContext
public DbSet<UserRole> UserRoles get; set;
创建数据库的sql脚本:
CREATE TABLE [dbo].[UserRoles] (
[RoleId] INT IDENTITY (1, 1) NOT NULL,
[RoleName] NVARCHAR (256) NOT NULL,
PRIMARY KEY CLUSTERED ([RoleId] ASC),
UNIQUE NONCLUSTERED ([RoleName] ASC)
);
型号:
[Table("UserRoles")]
public class UserRole
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int RoleId get; set;
public string RoleName get; set;
带有索引视图的控制器:
private UsersContext db = new UsersContext();
public ActionResult Index()
return View(db.Customers.ToList());
查看:
@using myStore.Helpers
@model IEnumerable<myStore.Areas.Administrator.Models.UserRole>
@
ViewBag.Title = "Roles management";
<h2>Roles management</h2>
<div class="admin-container">
<div class="bcontrol">
<a href="@Url.Action("Create", "Roles")" class="btn btn-large btn-primary"><i class="icon-plus-sign"></i> Create New Entry</a>
</div>
@
var grid = new WebGrid(Model, defaultSort: "RoleId", canSort:true, canPage: true, rowsPerPage:20);
@grid.Gethtml(
tableStyle: "tadmin",
alternatingRowStyle: "alt",
selectedRowStyle: "selected-row",
columns:
grid.Columns(
grid.Column("RoleId",
header: "ID " + Html.SortDirection(ref grid, "RoleId"),
style: "tadmin-id"),
grid.Column("RoleName",
header: "Role Name " + Html.SortDirection(ref grid, "RoleName"),
format: @<text><a href="@Url.Action("Details", "Roles", new id = item.RoleId )" >@item.RoleName</a></text>),
grid.Column("Control", style: "tadmin-control", canSort: false,
format:
@<text><a href="@Url.Action("Edit", "Roles", new id = item.RoleId )" class="btn btn-large btn-primary"><i class="icon-edit"></i> Edit</a>
<a href="@Url.Action("Details", "Roles", new id = item.RoleId )" class="btn btn-large btn-primary"><i class="icon-list"></i> Details</a>
<a href="@Url.Action("Delete", "Roles", new id = item.RoleId )" class="btn btn-large btn-primary"><i class="icon-minus-sign"></i> Delete</a></text>)
)
)</div>
和错误信息:
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.UserRoles'.
Source Error:
Line 19: public ActionResult Index()
Line 20:
Line 21: return View(db.UserRoles.ToList());
Line 22:
Line 23:
和堆栈跟踪:
[SqlException (0x80131904): 。] System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, 布尔型 breakConnection,Action`1 wrapCloseInAction) +1753986 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection,Action`1 wrapCloseInAction) +5296058 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +558 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) +1682 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +59 System.Data.SqlClient.SqlDataReader.get_MetaData() +90 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +365 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔 returnStream、布尔 异步,Int32 超时,任务和任务,布尔 asyncWrite) +1379 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法,TaskCompletionSource`1 完成,Int32 超时,Task& 任务, 布尔异步写入)+175 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法)+53 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)+134 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)+41 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为) +10 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为)+437
[EntityCommandExecutionException: 执行时出错 命令定义。有关详细信息,请参阅内部异常。] System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为)+507 System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext 上下文,ObjectParameterCollection 参数值)+730 System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +131 System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() +36 System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() +72 System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +23 System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() +40 System.Collections.Generic.List`1..ctor(IEnumerable`1 集合) +369 System.Linq.Enumerable.ToList(IEnumerable`1 来源)+58 myStore.Areas.Administrator.Controllers.RolesController.Index() 在 d:.projects\trains\myStore\myStore\Areas\Administrator\Controllers\RolesController.cs:21 lambda_method(闭包, ControllerBase, Object[]) +62 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数)+14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 个参数)+211 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary`2 参数)+27 System.Web.Mvc.Async.c__DisplayClass42.b__41() +28 System.Web.Mvc.Async.c__DisplayClass8`1.b__7(IAsyncResult _) +10 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +48 System.Web.Mvc.Async.c__DisplayClass39.b__33() +57 System.Web.Mvc.Async.c__DisplayClass4f.b__49() +223 System.Web.Mvc.Async.c__DisplayClass37.b__36(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +48 System.Web.Mvc.Async.c__DisplayClass2a.b__20() +24 System.Web.Mvc.Async.c__DisplayClass25.b__22(IAsyncResult asyncResult) +102 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43 System.Web.Mvc.c__DisplayClass1d.b__18(IAsyncResult 异步结果)+14 System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57 System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.c__DisplayClass8.b__3(IAsyncResult asyncResult) +25 System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 结果)+9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9628700 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
【问题讨论】:
只是好奇你的肯定它不存在于你的数据库中吗? 它已经存在并且有一些行 我建议让Entity Framework
通过package Manager Console
构建您的database
,而不是编写数据库脚本。此外,仅当Object
表存在或不存在时才会发生错误。我假设您的 EF 正在尝试创建表。但它已经在那里了。
sql server 2008 我现在试试代码优先
【参考方案1】:
不幸的是,问题非常简单——因为我有 2 个区域——主要和管理员,我分别有 2 种类型的数据连接,我在 webconfig 中只有 1 个连接字符串。在我为管理上下文和所有工作添加第二行之后 感谢关注) 所以问题在 webconfig 中不完整(配置错误)
【讨论】:
我在使用自定义架构时遇到了这个问题。问题是,当您添加新迁移时,“dbo”模式名称在 Migration.resx(设计器)文件中设置为 DefaultSchema。因此,即使这些表存在于我的自定义模式名称下,仍然,只要在 IIS 重新启动或部署后直接调用 API,它就会以某种方式开始寻找“dbo”模式并给我这个错误。如果 WebAPI 是通过来自另一个应用程序的调用来初始化的,它就可以正常工作。我还没有解决方案。有人建议使用实现 IDbCommandInterceptor 来动态切换模式。我正在评估。【参考方案2】:这通常只是意味着配置问题
也许真的没有这样的桌子 也许表在那里,但不是 dbo 方案 可能 db 区分大小写(确保两个表名拼写正确Source
【讨论】:
我已添加到 SampleData: public class SampleData : DropCreateDatabaseIfModelChanges protected override void Seed(AdminMyStoreConnection context) var userRoles = new Listscheme
、TableName
或If (Table Exists)
无关
似乎数据库是在某个地方创建的,这是一个主题错误)所以 - 如果在这个数据库的服务器资源管理器中没有我的表,它可以在哪里?
你在使用Internet Application Template
是吗?
不,我从空白开始,并使用 MVCStore 课程和我的增强功能【参考方案3】:
如果不重新运行迁移,您在数据库中的 table name
必须与 dbContext 中的 dbSet<> name
完全相同。 (在声明 dbSet 之前运行 update-databse
会导致该问题)
如下图
【讨论】:
这个问题是自我回答的,所以这不是问题。这在一般意义上是不正确的。表可以映射到具有完全不同名称的类和 DbSet。这就是 OR mapper 的想法。 该更改不再适用于该问题。目前还不清楚你在说什么。以上是关于无效的对象名称“dbo.UserRoles”的主要内容,如果未能解决你的问题,请参考以下文章
ExecuteSqlCommand 返回“无效的对象名称”错误