21

我剛開始使用EF並發現它很酷,但我遇到了一個問題,更新實體框架模型

問題:
我改變了表用戶裏面列的我的DB模式,這是Varbinary(50)之前我將其更改爲VarChar(50),然後在MyModel.edmx設計器中我選擇了「從數據庫更新模型」,單擊完成後我收到此錯誤。

錯誤:

 
    Error 2019: Member Mapping specified is not valid. 
    The type 'Edm.Binary [Nullable=False,DefaultValue=,MaxLength=100,FixedLength=False]' of member 
    'Email' in type 'LearnDBModel.User' is not compatible with SqlServer.varchar 
    [Nullable=False,DefaultValue=, MaxLength=50,Unicode=False,FixedLength=False]' of member 'Email' 
    in type 'LearnDBModel.Store.User'. 

讓我知道如何解決它

+1

你有沒有在數據庫中的任何數據? – Xharze

+0

@Xharze其實我修改的表是空的。 –

回答

48

我以前碰到類似的問題,發現的方式來解決它是從表中刪除該模型。保存並關閉模型。然後重新打開模型並重新添加表格。

+0

嘿,它的工作方式像魔術:),加上一個爲 –

+0

你也可以剪切/保存/粘貼/保存 – FLICKER

+0

如果這沒有奏效。你需要手動編輯。emdx文件 – FLICKER

1

無需擔心。在模型中選擇受影響的表格。如果您注意到,那麼您會發現一個帶有整數的新列名稱後綴(此行爲僅僅是因爲該列的數據類型發生了更改)。

示例如果您的列名稱是「Samplecolumn」,那麼在從數據庫更新模型後,您將獲得帶有Samplecolumn1的新列。您現在可以簡單地刪除舊列「Samplecolumn」,並使用常規類別下的屬性窗口將新列「Samplecolumn1」重命名爲「Samplecolumn」。

只需構建您的應用程序。錯誤將會消失。

+0

非常感謝您的幫助,+ 1對於 –

10

Shawn de Wet的解決方案工作正常,但如果您不想刪除表格(例如與其他表格的關係..),您可以使用其他解決方案: 使用xml Editor,Ctrl + F打開您的edmx文件發現類似

Property Name="Email" Type="Binary" Nullable="false" MaxLength="50" FixedLength="false"

更新它的行:保存並重建

Property Name="Email" Type="String" Nullable="false" MaxLength="50" Unicode="false" FixedLength="false"

+0

沒有嘗試過,但它看起來不夠好:) –

+0

令人驚歎的........ + 1。這幫助了我。謝謝... – User

-2

右鍵單擊Model.edmx [圖]上的更改表和「從數據庫更新模型」中的屬性。保存並運行

2

EF模型中的很多文件都會得到f ***** d。刪除和添加實體是不夠的。實體被複製爲像table,table1,table_result,table1_result,table_result1等...模型更新是更新重複的引用而不是原始的。

我要打開記事本,手動修復這些文件:

EFModel.Context.cs 
EFModel.edxm 

和刪除這些文件:

obj\Debug\edmxResourcesToEmbed\MYEfModel.csdl 
obj\Debug\edmxResourcesToEmbed\MYEfModel.msl 
obj\Debug\edmxResourcesToEmbed\MYEfModel.ssdl