我對Entity Framework還是比較陌生的,這也許就是爲什麼我已經拉近我的頭髮了(來自Windows窗體)。SQLite VS2013實體框架6 InvalidCastException
我正在VS2013中創建一個使用SQLite和EF 6的WPF應用程序,目標框架是v.4.5。
我正在使用數據庫第一種方法。我使用VS2013的服務器資源管理器工具創建了一個SQLite數據庫。然後,我從現有數據庫(在嚮導中選中 - 包括外鍵和Pluralize或Singularize對象名稱)中將ADO.NET實體數據模型添加到我的項目中。該向導爲我創建了「TemplateDataModel.edmx」。我的DbContext被稱爲「TemplateEntities」。 我的問題是這樣的。我實例化上下文:
this.m_DB = new TemplateEntities();
當我想從所謂的「操作」數據表中獲取的記錄列表我用這個代碼:
this.m_DB.Operations.ToList<Operation>()
調用此方法始終引發InvalidCastException。操作類(由VS生成)的代碼是這樣的:
public partial class Operation
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Operation()
{
this.ParameterSets = new HashSet<ParameterSet>();
}
public long ID { get; set; }
public long OperationPLC_ID { get; set; }
public string OperationIdentifier { get; set; }
public System.DateTime ChangedOnDate { get; set; }
public bool IsInUse { get; set; }
public string OperationContent { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ParameterSet> ParameterSets { get; set; }
}
我敢肯定,我只有在項目的命名空間中定義1「操作」類。 奇怪的是,查詢其他表很好用。只有這張表我無法查詢。 DbSet的其他方法也會拋出InvalidCastException,例如
this.m_DB.Operations.First<Operation>()
我也應該說我安裝EF時遇到了問題,首先使用SQLite工作。我不得不在這個論壇上發現一個解決方法。我將項目轉換爲.NET Framework v。4.0,然後使用NuGet包管理器安裝EF,然後將項目切換回v。4.5(因爲我在GUI中使用了功能區,似乎在.NET 4.0中不可用) 。
謝謝你的任何建議。
正如我在下面提到的,它現在起作用。 @Sergey L - 是的,我改變了表中的數據。實際上,我開始從Operation表中逐一刪除列,直到我只有一列 - ID列。然後它工作。然後我開始添加列。每添加一列之後,刪除整個數據模型,並使用Visual Studio的添加「ADO.NET實體數據模型」功能重新創建它。
@Sergey L - 我不知道怎麼拉從Visual Studio的服務器資源管理器中的SQL定義,但該表設計的屏幕截圖是在這裏: enter image description here
你確定'ToList'中的'Operation'類型是來自你的模型而不是另一個命名空間中的某個類? –
由VS生成的'Operation'類位於命名空間'PanelDeploymentTool'中。在我的代碼'this.m_DB.Operations.ToList()'當我將鼠標懸停在Operation字上時,IDE中的工具提示顯示文本「class PanelDeploymentTool.Operation」。基於這一點,我認爲這是正確的課程。如有需要,我會很樂意發佈其他信息。 –