2011-04-12 22 views

回答

41

,因爲它可能會發生:

  • 使用不正確的連接字符串
  • 指定的實體配置的DbContext實際上沒有在配置映射
+4

檢查連接字符串。當我將一個.edmx文件的連接字符串複製到另一個時,我面臨同樣的問題。這是行不通的。 – 2012-03-21 19:05:28

+0

@Shreedhar在arch的場景中,連接字符串沒有任何元數據(由EDMX文件生成)。也許你可以幫助這個問題,雖然:http://stackoverflow.com/questions/13634819/entityset-system-invalidoperationexception-the-entity-type-is-not-part-of- – 2012-11-29 21:35:36

+2

我正在建立連接字符串手動,所以對我來說,這是因爲我向EntityConnectionStringBuilder的MetaData屬性提供了一個不正確的程序集(以「res:// MyAssemblyThatContainsTheModel /」的形式)。我給它一個沒有實體數據模型嵌入資源的程序集,它只是建立了一個沒有實體的模型。這是由於我使用'Assembly.GetCallingAssembly()',由於JIT的方法內聯而返回了不正確的程序集。我用'[MethodImpl(MethodImplOptions.NoInlining)]'標記了內聯方法,並解決了問題。 – 2012-12-19 11:02:09

0

我一直在做第一個數據庫,並使用爲我的模型建立了模板生成(EF 4.1)

我將生成的代碼複製到一個新文件中,並移除了導航道具ERTIES。那時我開始看到這個錯誤。我關閉了懶加載,但似乎導航屬性在POCO中仍然是必需的。

我想這個錯誤可能表明你的模型缺少一些東西。

namespace TestApp.BLL 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class User 
    { 
     public User() 
     { 
      //this.Roles = new HashSet<Role>(); 
     } 

     public int UserId { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string UserName { get; set; } 
     public string Password { get; set; } 

     //public virtual ICollection<Role> Roles { get; set; } 
    } 
} 

上面的代碼顯示了註釋的導航屬性。如果我在所有POCO(也就是POCO角色)上取消註釋,這個例外就會消失。

5

如果您試圖在一對多關聯中爲子集合上的某個EntityState設置一個EntityState,則也會出現此消息。

例如;如果在下面的代碼段的代碼ParentEnt和ChildEnt之間存在一個一到多關聯時,錯誤消息:

的實體類型Hash1Type不是模型的當前上下文的一部分。

MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged; 

以下變化不會產生錯誤:

MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged; 

注意,在這種情況下使用的First()可能表明牛逼

14

我得到這個時候我的課,從的DbContext繼承做不要將模型聲明爲屬性。例如,我忘了下面的代碼添加屬性FooModel:

public class MyDBContext : DbContext 
{ 
    public DbSet<FooModel> FooModels{ get; set; } 

    // etc. ... 
} 
+1

+1這正是我面臨的問題。謝謝! – Samuel 2013-12-17 02:52:53

0

UPDATE

這個錯誤一直攻擊我,我對數據庫進行各種更新。最後我刪除了edmx文件,並使用相同的表格和存儲的特效再次創建它。

我得到這個時候產生的實體是缺少一個空列:

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace MyProgram.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Question 
    { 
     public int id { get; set; } 
     public string title { get; set; } 
     public string body { get; set; } 
     public string tags { get; set; } 
     public int votes { get; set; }//I had to manually add this property which is nullable int in the database 
    } 
} 

我產生了初始模型後添加的屬性。但是,我甚至嘗試刪除表格並重新創建它。這並沒有解決它。只有手動添加屬性才能修復它。

1

我有這個錯誤。

事實證明,我已經添加了一個新的領域的數據庫查看幾個小時前。我更新了上下文(作爲我正在做的其他事情的一部分),並得到了這個錯誤。

當我更新POCO的時候一切都很好:EF引發了這個錯誤,因爲它無法將視圖中的字段映射到視圖的POCO中的屬性。

在這種情況下IMO不是最有用的錯誤消息。

0

回答的問題是「什麼是這個錯誤的可能原因?」:

這個錯誤似乎發生內部/ EDMX模型沒有成功地建立任何時間,或者沒有完全建立。這個問題有很多可能的原因。不幸的是,在構建模型時似乎沒有足夠的錯誤報告或錯誤檢測,因此解決它似乎涉及嘗試一堆事情來查看導致問題消失的原因。

在過去的幾天裏,我遇到了這個錯誤的另一個實例,使用EF 6.0(目前預發佈代碼),代碼優先和自定義約定。事實證明,根本原因是我有一個自定義約定重命名ID EdmProperty(例如ID - > MyTypeId)。如果我禁用了自定義約定,這個問題就消失了;如果我啓用了我的約定,問題就會發生。沒有日誌記錄或異常或其他錯誤來表明構建模型時發生問題。直到我嘗試將一個實體添加到DbSet時,這個異常纔會出現。生成數據庫時(通過遷移),約定沒有造成任何問題。

1

當您的模型未正確映射到您的類時,可能會發生這種情況。在我的情況下,當我使用EF Model First並且從數據庫更新了我的EDMX模型但沒有更新我的Entity類時,出現此錯誤。具體來說,實體中的屬性在DB中是小寫,而EDMX圖中是大寫。 而我遇到的另一個問題是EDMX圖中的模型屬性未被轉換爲我的應用程序枚舉因此EF無法識別該實體。

0

在我的場景中,我使用EF6將MySQL數據庫遷移到MSSQL。我有2個獨立的模型和上下文,每個都有自己的連接字符串。這些類具有相同的名稱,但MySQL的全部都是小寫字母,而MSSQL是一個Pascal封套。我從包含我的EDMX模型的相關程序集中複製了兩個連接字符串。但是當我運行我的應用程序時,我得到了關於已經添加到字典列表的2個連接字符串之一的錯誤。

因此,我刪除了衝突的條目,愚蠢地以爲它以某種方式訪問​​了程序集自己的app.config中的連接字符串(它已經晚了!)。但是,不是,實際發生的錯誤是因爲兩個連接字符串也具有相同的名稱 - 一個全部是小寫字母,一個是Pascal封套 - 即Dictionary鍵忽略了套管。所以當我刪除MySQL時,它試圖爲這兩個模型使用MSSQL連接字符串。所以我不得不在代碼中重新添加,重命名和手動設置第二個模型的連接字符串。

相關問題