2011-01-08 16 views
3
VS 2008, SqlCe 3.5 

我試圖去學習EntityFramework,但無法獲得基本的插入和更新工作。當我包含SqlCe數據庫(.sdf)時,嚮導會創建Test.edmx/designer.vb文件。從那我創建我的datacontext,如下所示。表名是Users。使用SqlCe和EntityFramework插入和更新的語法

我的實體類的語法與Web上的示例有些不同。這有點令人困惑,我不知道這是爲什麼。下面我將展示兩種不同的插入方法,兩者給出的.SaveChanges行例外:

An error occurred while updating the entries. See the InnerException for details. 

{「服務器生成的密鑰和服務器生成的值不是由SQL Server精簡的支持。」}

而且更新方法我真的不知道該怎麼在缺失的部分寫..將是對這些問題的一些援助,很高興......

Public Sub Insert(ByVal user As Users) 
    Dim ctx As New TestDBEntities1(connection) 
    ctx.Users.Context.AddObject("Users", user) 
    ctx.Users.Context.SaveChanges() 
End Sub 

Public Sub Insert(ByVal user As Users) 
    Dim ctx As New TestDBEntities1(connection) 

    ctx.AddToUsers(user) 
    ctx.SaveChanges() 
End Sub 


Public Sub Update(ByVal user As Users) 
    Dim ctx As New TestDBEntities1(connection) 
    Dim q = (From n In ctx.Users Where n.Id = user.Id Select n).Single 

    ' How to update ?? 

    ctx.SaveChanges() 
End Sub 
+0

看起來是http://stackoverflow.com/questions/2734424/c-4-0-ef-server-generated-keys-and-server-generated-values-are-not-supported-b的副本 – SilverbackNet 2011-01-08 05:38:21

回答

0

如上所述;這已在SQL CE 4.0中修復。

1

我們我們會根據這個Microsoft TechNet article他們這樣說:

當使用實體框架,一個 實體的鍵可能被標記爲生成的服務器 。這使得數據庫 能夠爲插入或創建實體上的密鑰生成一個值。 此外,實體的零個或多個屬性 可能會被標記爲 服務器生成的值。有關更多 的信息,請參閱實體框架 文檔中的商店生成的 模式主題。

的SQL Server Compact不支持 實體服務器生成的密鑰或 值時,它與實體 框架中使用,雖然實體 框架允許你定義實體 類型的服務器生成的密鑰或 值。數據處理操作 具有服務器生成的實體 值會拋出「不支持」 異常。

但你確實有幾個選項,您可以使用UNIQUEIDENTIFIER或者你可以生成自己的bigint類型/ INT的關鍵。最好的解決方案是讀取該表中的當前ID並將其遞增1