Linq db.submitchanges()不起作用

时间:2014-01-29 06:20:37

标签: c# sql winforms linq sql-server-ce

我在使用linq代码成功执行的表中提交更改时遇到问题,因为它没有保存表中的更改。

有人说你的桌子必须有主键才能提交更改,但我的桌子上有主键。

有人说使用integrated security = true但它会生成异常无效的关键字集成安全性

这是我的连接字符串

<add name="POSConnectionString" connectionString="Persist Security Info=False; Data Source=|DataDirectory|\App_Data\POS.sdf; mode=Read Write;"
    providerName="Microsoft.SqlServerCe.Client.4.0" /> 

在表格中插入数据的代码

public bool InsertItem(Item item)
{
    try
    {
        using (SqlCeConnection conn = new SqlCeConnection(connectionString))
        {
            using (POSContext db = new POSContext(conn))
            {                        
                db.Items.InsertOnSubmit(item);
                db.SubmitChanges();
                return true;
            }
        }
    }
    catch (Exception ex)
    {
        return false;
    }

}

这是我的表脚本

CREATE TABLE [Item] (
  [ItemID] int IDENTITY (1,1) NOT NULL
, [ItemName] nvarchar(100) NOT NULL
, [ItemCode] nvarchar(100) NOT NULL
, [Weight] int NOT NULL
, [IsActive] bit NOT NULL
, [Stock] int NULL
, [UnitID] int NULL
);
GO
ALTER TABLE [Item] ADD CONSTRAINT [PK_Item] PRIMARY KEY ([ItemID]);
GO

我正在使用Windows窗体应用程序开发 数据库Sql server压缩数据库4.0 Visual Studio 2012

3 个答案:

答案 0 :(得分:2)

我通过将数据库属性更改为不复制来获得解决方案,因为它在bin / debug中创建数据库副本并保存更改

答案 1 :(得分:0)

表中是否有自动增量(标识)列。要使用Linq插入数据,您必须在表上将Identity列作为主键。

答案 2 :(得分:0)

我遇到了同样的问题。因此,在构建项目时,Visual Studio会覆盖您的数据库,并且它具有dafault值。尝试从&#34; bin / debug&#34;启动它。在您的项目目录中。希望它会有所帮助。