为啥我的 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?