【发布时间】:2012-10-06 16:33:08
【问题描述】:
我无法更新数据库,但是当我调试它时,生产会更新并在上下文中创建记录。但是当我关闭调试时,数据库没有任何数据定义。
我喜欢编码,直到我将这个“不更新”的 SubmitChanges() 方法储存到数据库(但会更新上下文)。它真的要了我的命,我在网上找到了几个小时的解决方案。
顺便说一句,我将“id”设置为生产 PK,并在 pk 属性中增加了身份。同样在 .dbml 文件中,我还设置了自动增量。以下是我的代码:
qmsDBDataContext context = new qmsDBDataContext();
public void AddProduction(int quails, int eggs, int feeds, int id_box) {
Production production = new Production();
production.quails = quails;
production.eggs = eggs;
production.id_box = id_box;
production.feeds = feeds;
context.Productions.InsertOnSubmit(production);
context.SubmitChanges();
}
【问题讨论】:
-
调用 SubmitChanges 后 production.id 的值是多少。如果它为零,则要么所有参数都为零,要么您的定义/dbml 错误。如果它不为零,那么要么您处于未完成的事务中(例如未完成的 TransactionScope),要么记录正在正确保存。
-
@sgmoore 从 1 开始,因为我设置种子 =1,然后 2 用于另一个添加的记录,依此类推...
-
@sgmoore 那笔交易是什么?我还不熟悉 TransactionScope 的东西……是不是我没有输入值的 production.id?
-
有关交易,请参阅stackoverflow.com/questions/542525/… - 但您不太可能在不知情的情况下使用它(除非您复制了其他人的代码)。当您关闭并重新启动程序时,您的 ID 是否从 1 开始。您还可以检查 context.Connection.ConnectionString 的值以确保您的程序正在访问正确的数据库并确保没有删除记录甚至删除/重新创建数据库。如果您有权访问 SQL 分析器,它可能有助于查看哪些 SQL 命令正在访问您的 sql 服务器。
-
@sgmoore 我最近刚刚学会了如何使用 LINQ to SQL 来阅读 HeadFirst C#。我刚刚读到的是如何从数据库中获取数据。然后我搜索站点以使用 Linq2SQL 插入、更新和删除。所有这些站点都有相同的方法来提交要写入数据库的更改,即 dataContext.SubmitChanges();看来我做了必要的事情来在 ORM 中映射数据库,因为我已经在访问它并显示我在数据库中手动写入的数据。
标签: c# .net linq-to-sql