为啥我的 LINQ INSERTS 没有在 SQL Server CE 3.5 中持续存在?

Posted

技术标签:

【中文标题】为啥我的 LINQ INSERTS 没有在 SQL Server CE 3.5 中持续存在?【英文标题】:Why are my LINQ INSERTS not persisting in SQL Server CE 3.5?为什么我的 LINQ INSERTS 没有在 SQL Server CE 3.5 中持续存在? 【发布时间】:2009-08-27 21:25:44 【问题描述】:

我将 LINQ to SQL 与 Sql Server Compact Edition 3.5 和 VS2008 一起使用。

我有一个非常简单的表 (Tokens),其中包含一个 uniqueidentifier 主键 (TokenID) 和另外两个可为空的字段(UsedBy 和 UsedOn)。我正在尝试使用 LINQ 将新行插入表中,但由于某种原因它们没有持久化。

这是我的代码:

        var connectionstring = "Data Source=|DataDirectory|\\MyData.sdf";
        MyData db = new MyData(connectionstring)  Log = Console.Out ;

        Tokens token = new Tokens  TokenID = Guid.NewGuid() ;
        db.Tokens.InsertOnSubmit(token);
        //db.GetChangeSet();
        db.SubmitChanges();

        var tokens = from t in db.Tokens
                     select t;
        foreach (var t in tokens)
        
            Debug.Print(t.TokenID.ToString());
        

如果我取消注释 db.GetChangeSet();我可以看到挂起的插入,当我迭代并将它们打印到调试寡妇时,令牌的数量每次都会增长。但是如果我在 VS 中查询表(通过显示表数据)它是空的?像这样查看数据还会将 LINQ 返回的令牌“重置”为原始状态。

我很确定我犯了一些简单的错误,但我看不到它。有什么想法吗?

【问题讨论】:

提交后,如果您想验证它们是否真的可以从数据库中读取,您可能应该在加载令牌时使用新的数据上下文 【参考方案1】:

在每次构建时检查您的 DB 文件是否未复制到输出目录(在项目项的属性页中)

【讨论】:

是的,这与我遇到的问题非常接近(请参阅我的答案)。【参考方案2】:

当然,在发布我的问题 5 分钟后,我有一个巨大的 DUH!片刻。原来我正在刷新项目中的数据库,以查看插入是否持续存在,而我应该检查 \bin\Debug\MyData.sdf。

相信代码肖恩,相信代码。哦,记住你有时是个白痴。

【讨论】:

以上是关于为啥我的 LINQ INSERTS 没有在 SQL Server CE 3.5 中持续存在?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:为啥 Core Data 中的 Bulk Inserts 这么慢?

当数据库似乎没有冲突时,为啥 LINQ to SQL 会在 Windows Phone 上报告冲突?

为啥 Linq-to-SQL 会添加不必要的 COUNT()?

为啥,当我在 WCF 服务中模拟时,当我尝试运行 LINQ to SQL 查询时,我的服务不能加载 System.Transactions?

为啥 Linq2DB 在处理 DataContext 后执行 SQL 语句

LINQ 查询到 LINQ 方法;为啥我需要 CBool​​?