使用SqlITe和Entity Framework进行插入和更新的语法

时间:2011-01-08 05:23:12

标签: sql database entity-framework

VS 2008, SqlCe 3.5

我正在尝试学习EntityFramework,但无法获得基本的插入和更新工作。当我包含SqlCe数据库(.sdf)时,向导会创建Test.edmx / designer.vb文件。从那里我创建我的datacontext,如下所示。表名是Users。

我的实体类的语法似乎与Web上的示例略有不同。这有点令人困惑,我不知道为什么会这样。下面我展示了两种不同的Insert方法,这两种方法都给出了.SaveChanges行的例外:

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

{“SQL Server Compact不支持服务器生成的密钥和服务器生成的值。”}

此外,更新方法我真的不知道在缺失的部分写什么..很高兴在这些问题上提供一些帮助......

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

2 个答案:

答案 0 :(得分:1)

根据这个Microsoft TechNet article,他们这样说:

  

使用实体框架时,   实体的密钥可以标记为服务器   产生。这使数据库成为可能   为密钥生成一个值   插入或实体创建。   此外,零个或多个属性   实体可能被标记为   服务器生成的值。更多   信息,请参阅存储生成   实体框架中的模式主题   文档。

     

SQL Server Compact不支持   具有服务器生成密钥的实体或   与实体一起使用时的值   框架,虽然是实体   Framework允许您定义实体   使用服务器生成的密钥或   值。数据操作操作   具有服务器生成的实体   值抛出“不支持”   异常。

但是你有两个选项,你可以使用UNIQUEIDENTIFIER,或者你可以生成自己的bigint / int类型的键。最好的解决方案是读取该表中的当前ID并将其递增1

答案 1 :(得分:0)

如上所述;这已在SQL CE 4.0中修复。