的一部分,同時與EF代碼第一份工作我會在不同的時間如下錯誤:EF 4.1代碼第一次錯誤 - 實體類型SOMETYPE是不是該機型爲當前上下文
的實體類型SOMETYPE不是一部分當前情況下的模型。
這個錯誤的可能原因是什麼?
的一部分,同時與EF代碼第一份工作我會在不同的時間如下錯誤:EF 4.1代碼第一次錯誤 - 實體類型SOMETYPE是不是該機型爲當前上下文
的實體類型SOMETYPE不是一部分當前情況下的模型。
這個錯誤的可能原因是什麼?
,因爲它可能會發生:
檢查連接字符串。當我將一個.edmx文件的連接字符串複製到另一個時,我面臨同樣的問題。這是行不通的。 – 2012-03-21 19:05:28
@Shreedhar在arch的場景中,連接字符串沒有任何元數據(由EDMX文件生成)。也許你可以幫助這個問題,雖然:http://stackoverflow.com/questions/13634819/entityset-system-invalidoperationexception-the-entity-type-is-not-part-of- – 2012-11-29 21:35:36
我正在建立連接字符串手動,所以對我來說,這是因爲我向EntityConnectionStringBuilder的MetaData屬性提供了一個不正確的程序集(以「res:// MyAssemblyThatContainsTheModel /」的形式)。我給它一個沒有實體數據模型嵌入資源的程序集,它只是建立了一個沒有實體的模型。這是由於我使用'Assembly.GetCallingAssembly()',由於JIT的方法內聯而返回了不正確的程序集。我用'[MethodImpl(MethodImplOptions.NoInlining)]'標記了內聯方法,並解決了問題。 – 2012-12-19 11:02:09
我一直在做第一個數據庫,並使用爲我的模型建立了模板生成(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角色)上取消註釋,這個例外就會消失。
如果您試圖在一對多關聯中爲子集合上的某個EntityState設置一個EntityState,則也會出現此消息。
例如;如果在下面的代碼段的代碼ParentEnt和ChildEnt之間存在一個一到多關聯時,錯誤消息:
的實體類型Hash1Type不是模型的當前上下文的一部分。
MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged;
以下變化不會產生錯誤:
MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged;
注意,在這種情況下使用的First()
可能表明牛逼
我得到這個時候我的課,從的DbContext繼承做不要將模型聲明爲屬性。例如,我忘了下面的代碼添加屬性FooModel:
public class MyDBContext : DbContext
{
public DbSet<FooModel> FooModels{ get; set; }
// etc. ...
}
+1這正是我面臨的問題。謝謝! – Samuel 2013-12-17 02:52:53
這也可以通過在你的POCO的屬性沒有被命名,正是因爲他們都在EDMX /模型構建器造成的。請在這裏看到我的帖子,詳細瞭解我如何解決問題。
The entity type <class> is not part of the model for the current context
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
}
}
我產生了初始模型後添加的屬性。但是,我甚至嘗試刪除表格並重新創建它。這並沒有解決它。只有手動添加屬性才能修復它。
我有這個錯誤。
事實證明,我已經添加了一個新的領域的數據庫查看幾個小時前。我更新了上下文(作爲我正在做的其他事情的一部分),並得到了這個錯誤。
當我更新POCO的時候一切都很好:EF引發了這個錯誤,因爲它無法將視圖中的字段映射到視圖的POCO中的屬性。
在這種情況下IMO不是最有用的錯誤消息。
回答的問題是「什麼是這個錯誤的可能原因?」:
這個錯誤似乎發生內部/ EDMX模型沒有成功地建立任何時間,或者沒有完全建立。這個問題有很多可能的原因。不幸的是,在構建模型時似乎沒有足夠的錯誤報告或錯誤檢測,因此解決它似乎涉及嘗試一堆事情來查看導致問題消失的原因。
在過去的幾天裏,我遇到了這個錯誤的另一個實例,使用EF 6.0(目前預發佈代碼),代碼優先和自定義約定。事實證明,根本原因是我有一個自定義約定重命名ID EdmProperty(例如ID - > MyTypeId)。如果我禁用了自定義約定,這個問題就消失了;如果我啓用了我的約定,問題就會發生。沒有日誌記錄或異常或其他錯誤來表明構建模型時發生問題。直到我嘗試將一個實體添加到DbSet時,這個異常纔會出現。生成數據庫時(通過遷移),約定沒有造成任何問題。
當您的模型未正確映射到您的類時,可能會發生這種情況。在我的情況下,當我使用EF Model First並且從數據庫更新了我的EDMX模型但沒有更新我的Entity類時,出現此錯誤。具體來說,實體中的屬性在DB中是小寫,而EDMX圖中是大寫。 而我遇到的另一個問題是EDMX圖中的模型屬性未被轉換爲我的應用程序枚舉因此EF無法識別該實體。
在我的場景中,我使用EF6將MySQL數據庫遷移到MSSQL。我有2個獨立的模型和上下文,每個都有自己的連接字符串。這些類具有相同的名稱,但MySQL的全部都是小寫字母,而MSSQL是一個Pascal封套。我從包含我的EDMX模型的相關程序集中複製了兩個連接字符串。但是當我運行我的應用程序時,我得到了關於已經添加到字典列表的2個連接字符串之一的錯誤。
因此,我刪除了衝突的條目,愚蠢地以爲它以某種方式訪問了程序集自己的app.config中的連接字符串(它已經晚了!)。但是,不是,實際發生的錯誤是因爲兩個連接字符串也具有相同的名稱 - 一個全部是小寫字母,一個是Pascal封套 - 即Dictionary鍵忽略了套管。所以當我刪除MySQL時,它試圖爲這兩個模型使用MSSQL連接字符串。所以我不得不在代碼中重新添加,重命名和手動設置第二個模型的連接字符串。
你可以發佈你的模型的代碼? – 2011-04-12 11:39:12