2017-07-03 103 views
1

我在ASP.NET Web应用程序上收到错误CS1061。VS C#数据模型:CS1061:'实体'不包含'tablename'的定义

“实体”不包含关于“AspNetRoles”的定义和没有扩展方法“AspNetRoles”接受类型“实体”的第一个参数可以找到(是否缺少using指令或程序集引用?)

有超过90的所有表和操作(添加,更改,删除,获取等)CS1061错误信息,如下图所示:

using EntityData.Model; 
using EntityData.Modules; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace EntityData.Actions 
{ 
    public class AspNetRolesActions : BaseActions<AspNetRole> 
    { 
     public override void Add(AspNetRole t, Guid by) 
     { 
      ctx.AspNetRoles.Add(t); 
      Save(); 
     } 

的Web应用程序工作正常,直到我更新的数据模型,以反映我在SQL DB上进行的更改。我试图清理和重建无济于事。

如果我恢复的更改数据模型,我可以运行没有问题的应用程序..但我不能保存在我创建的新字段数据..

可能是什么回事?

+0

你做了什么改变? –

+0

我在其中一个表上添加了一个新字段。我只改变SSMS表格的结构。然后我尝试使用“从数据库更新模型...”命令来刷新数据模型 – Sideswipe

回答

1

大多数情况下,当您更改SQL表架构时,您的应用无法准确找到上下文的映射表。换句话说:它失去了与SQL Db的同步。

如果您使用的是“EF DbContext Generator”,您必须打开'.tt'文件并重新添加表格。

重要的是你知道你的上下文发生器中的表格并不反映你确切的数据库方案。无论如何,您必须将您的上下文重新映射到您的数据库计划。

  1. 请看看您的解决方案中应包含的.tt文件。

  2. 验证修改后的表是否存在于新列的上下文中。

  3. 如果没有,简单的方法是删除表并重新从数据库中添加它。

  4. 然后重建您的解决方案。

+0

我该怎么做?我的意思是,我如何重新映射?我只是从另一个开发人员继承了这个网络应用程序,我是新的数据模型。 – Sideswipe

+0

哇,你的回答给了我一个线索。 我打开DataModel.context.cs并注意到有不同的类名VS产生一个新的上下文model.cs文件,以不同的方式命名类名。此名称是“更新向导”中的不可编辑字段“将连接设置保存为App.config:”。 VS将使用连接字符串名称作为类名.. – Sideswipe

+0

我更新了我的答案......您的问题对您无帮助。我们非常感谢您提供更多详细信息,不仅针对您的错误,而且您如何更新数据库,上下文等。 –

1

感谢Daniel给我一个想法如何解决这个问题。

当Visual Studio的更新向导重新创建数据模型时,它使用与我的应用中已有的不同的类名。

所以我所做的就是修改生成的DataModel.context.cs使用以前的名字,现在所有的错误都没有了..

我重复这个过程中一对夫妇的时间来确认这是解决方案。

  1. 我解开所有更改数据模式(右键单击 - >撤销)从数据库
  2. 更新模型...
  3. 打开DataModel.context。CS
  4. 更改类名以前的名称使用
  5. 重建解决方案

无法解决了这个没有丹尼尔的帮助..谢谢!

+0

不客气,朋友! –

相关问题