2017-07-03 99 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

不客氣,朋友! –

相關問題