2010-06-08 69 views
64

我有一個實體框架4模型優先設計。我在設計師中創建了我的模型初稿,一切都很順利。我編譯,生成數據庫等實體框架4映射片段錯誤添加新實體標量時

後來我試圖將一個字符串標量(可空=真)添加到現有的實體之一,我不斷收到這種類型的錯誤,當我編譯:

錯誤3004:映射 問題從行569開始:否 爲屬性指定的映射 Set MyEntities中的MyEntity.MyValue。一個 實體鍵(PK)不會 往返時:鍵入 [MyEntities.MyEntity]

我一直有手動打開EDMX文件並更正XML每當我加標量實體是。

想法是怎麼回事?

+0

究竟什麼是你修正? – 2010-06-09 12:45:25

+0

我手動編輯實體類型並設置映射。 – 2010-06-09 22:06:10

回答

74

已經發現,我添加/更改/刪除我的實體屬性後,我必須「從模型生成數據庫」,否則我會得到3004映射錯誤。

+32

這太可笑了!我從數據庫創建我的模型,而不是其他方式。我開始發現EF相當有問題...... :( – Siewers 2011-01-17 20:37:56

+5

我注意到當我刪除屬性時,模型的更新版本仍然包含舊字段,我必須手動刪除這些字段。它可以幫助任何人 – 2011-04-04 23:33:13

+0

我得到這個錯誤,看起來好像數據庫沒有與模型同步,但是我使用Code First,並且不能「從模型生成數據庫」。我已將其設置爲DropCreateDatabaseIfModelChanges,由於某些原因,這些附加屬性不起作用:/ – elwyn 2011-04-09 04:00:29

1

如果您的所有查詢都是用存儲過程編寫的,而您只是試圖填充模型,那麼您可以切換到適用於我的複雜類型。

如何創建一個複雜類型:

  1. 手動更改 實體生成的類的名字你 與一個名字不 已經在使用你的EDMX文件有問題。
  2. 選擇模型瀏覽器窗口並點擊右鍵/添加一個新的複雜類型。
  3. 將 原始模型的屬性複製/粘貼到複雜類型。
  4. 將您的存儲過程映射到 複雜類型。

    我希望這可以幫助別人。

39

我剛剛從模型中刪除了違規表,然後將它們添加回來,一切都很好。

+5

也爲我工作。數據庫第一。 – vbullinger 2013-04-17 16:48:25

+0

這仍然發生在EF5中,這是爲我工作的解決方案。就我而言,我已經刪除了一列,並在表中添加了一個外鍵關係(以防有人找出原因)。數據庫也是如此。 – Crwth 2013-08-14 03:29:28

+0

這似乎是最好的解決方案,並且易於記憶。如果我更改了數據庫,我將從現在開始刪除然後添加。 – Nick 2015-02-13 20:59:00

27

對於那些從數據庫創建模型的人,在對數據庫進行更改後,我遇到了此問題。當我因爲某種原因在數據庫中更改字段名時發生了這種情況(我認爲如果更改數據類型也會發生這種情況)。

對我來說,解決方案是右鍵單擊工作區並選擇「從數據庫更新模型」。這應該將數據庫中的屬性添加到您的模型中,但是,它不會刪除舊的屬性,這些屬性會給您提供3004錯誤。

右鍵單擊工作區並選擇「驗證」。這應該會給你一個錯誤列表,顯示違規的屬性。然後,您可以右鍵單擊每個違規的屬性並將其從模型中手動刪除。

這解決了我的問題。希望它可以幫助別人。

+0

**這應該會給你一個顯示違規屬性的錯誤列表。然後,您可以右鍵單擊每個違規的屬性並將其從模型中手動刪除。 – 2015-10-19 20:29:04

+0

「右鍵單擊工作區並選擇」驗證「」嗯,我右鍵單擊VS從edmx文件生成的圖並選擇「驗證」。我沒有看到任何錯誤。我是否驗證錯誤的東西? – 2016-01-28 09:20:26

+0

解決了我的問題,我發生了,因爲我想先做一些代碼。以前我使用db forst。比失敗時,我添加了數據庫中的表和更新的模型,並出現問題。有2個領域我刪除,它的工作(是) – 2016-02-15 08:40:31

0

在我的某個實體上重命名屬性後,我收到了同樣的問題。

我發現我的實體的屬性和表中相應的列之間的映射沒有設置。

您可以通過右鍵單擊模型中的實體並選擇「表格映射」來使用編輯器來設置它。確保屬性映射到數據庫中的列。

編輯:我還需要重新運行我的tt文件來生成新的類。 (可能自從我在另一個項目中使用它之後?)

0

查看xml文件(edmx)後,將模型移動到另一個項目並意識到一切正常,我決定關閉並打開Visual Studio並complile然後,錯誤消失。

10

如果要修改數據庫而不重新生成整個模型或從模型重新創建數據庫,我發現通過Visual Studio修改EDMX圖中的屬性是最簡單和最安全的,然後手動調整Visual Studio的映射不允許訪問。

的錯誤會給你一個行號:在映射片段

問題起始於行

在文本編輯器只要打開EDMX文件,轉到該行,應該很明顯的是需要修復的東西。有一個部分,這將是這樣的:

<EntityTypeMapping TypeName="YourModel.YourType"> 
    <MappingFragment StoreEntitySet="YourType"> 
    <ScalarProperty Name="PropertyName1" ColumnName="DatabaseColumn1" /> 
    <ScalarProperty Name="PropertyName2" ColumnName="DatabaseColumn2" /> 
    ... 
    </MappingFragment> 
</EntityTypeMapping> 

只要確保有您需要每個屬性/列名的節點,所有的屬性在<EntityType Name="YourTable">部分在EDMX文件

的頂部還列出了
+0

這是一個很好的調用 - 雖然它可能是危險的,如果你把東西搞砸:) – user1477388 2014-04-03 17:48:37

+0

這確實解決了這個問題,雖然我驚訝的是添加一列到edmx的圖形視圖不這樣做!我希望我能給你更多的觀點... – 2016-02-01 16:06:49

1

另一種替代方法是在不從表格中刪除表格並重新添加表格的情況下,使用表格映射選項。

  1. 轉到到模型瀏覽器
  2. 上表名右鍵。
  3. 選擇tablle映射
  4. Visual Studio將顯示一個窗口,其EF屬性匹配/缺少表列。
  5. 選擇/匹配相應的列缺少財產

enter image description here