【问题标题】:Service based database & LINQ To SQL, inserting new row基于服务的数据库和 LINQ To SQL,插入新行
【发布时间】:2016-08-23 17:41:04
【问题描述】:

我在基于服务的数据库中有一个名为 Category 的非常基本的表,如下所示:

CategoryID:主键、身份

CategoryName:只是一个 nvarchar(max) 列

我在项目中添加了一个 LINQ To SQL 类,并在表单的构造函数之前对其进行了初始化:

DataClasses1DataContext dc = new DataClasses1DataContext();

现在我只想做一些简单的事情:在 Category 表中添加一个新行。 我试过这个:

var c = new Category()
{
    CategoryName = "test"
};
dc.Categories.InsertOnSubmit(c);
dc.SubmitChanges();

我已经尝试过使用 CategoryID = 4 和没有它(4 将是下一个可用的 ID)。

我还设置了数据库的复制到输出目录属性,如果更新则复制。

我什至尝试从 CategoryID 中删除标识(尽管这不应该是一个好的解决方案),但后来我遇到了一个异常,即 CategoryID 不应该为空(即使我将其设置为 4)。

(我没有使用实体框架)。

【问题讨论】:

  • CategoryID 是否设置为主键并在您的数据库中设置为自动递增?你有错误吗?如果有请提供。如果您没有收到错误,您可以将 db.SubmitChanges 放入 try catch...
  • 尝试 dc.Categories.Add(c); dc.SaveChanges();
  • 你能粘贴EF生成的Category类吗?我想它不携带来自数据库的身份信息
  • 我没有使用实体框架,所以 .Add(c) 无法完成。我现在没有收到任何错误,但新行没有出现。 CategoryID 确实是一个主键,并设置为自动递增一。

标签: c# winforms


【解决方案1】:

我想我找到了适用于 Visual Studio 2015 的解决方案。 转到您的服务器资源管理器并打开 .mdf 的属性。复制连接字符串并将其粘贴到右括号中,并将其放在逐字字符串文字(@“”)中并删除其中的所有引号(如果有的话)。

DataClasses1DataContext dc = new DataClasses1DataContext(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\FilePathHere\Database.mdf;Integrated Security=True");

【讨论】:

    【解决方案2】:

    发现问题(有点)。该代码在 Visual Studio 2013 中运行良好,因此我相当确定问题出在 VS2015 上。

    【讨论】:

    • 这不是 Visual Studio 版本的问题。恐怕您弄乱了连接字符串,例如,将新行保存在不同的数据库中,然后在您检查结果的数据库中保存
    • 我正在使用 VS 为基于服务的数据库生成的相同连接字符串。
    • 你应该详细说明
    猜你喜欢
    • 2015-12-17
    • 2011-01-29
    • 2013-10-27
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多