【问题标题】:Linq to SQL not inserting data onto the DBLinq to SQL 未将数据插入数据库
【发布时间】:2011-01-29 02:42:46
【问题描述】:

我在这里有一点/奇怪的行为,我浏览了互联网,所以我没有找到回应。

我不得不承认这是我第一次使用数据库,我知道如何将它们与 SQL 一起使用,但从未实际使用过。

无论如何,我的应用程序插入数据有问题,我刚刚创建了一个非常简单的项目来测试它,但还没有解决方案。

我有一个带有 Sql Server 的示例数据库

Id - int(身份主键) 名称 - nchar(10)(非空)

这个表叫做“Person”,简单得像个馅饼。

我有这个:

static void Main(string[] args)
{
    var db = new ExampleDBDataContext {Log = Console.Out};

    var jesus = new Person {Name = "Jesus"};

    db.Persons.InsertOnSubmit(jesus);
    db.SubmitChanges();

    var query = from person in db.Persons select person;

    foreach (var p in query)
    {
        Console.WriteLine(p.Name);
    }
}

如您所见,没有什么多余的。

它在控制台中显示耶稣。但是如果你看到表数据,没有数据,只是空的。我注释了对象的创建和插入,foreach 不打印任何东西(正常,数据库中没有数据)

奇怪的是我在数据库中手动创建了一行,而 Id 是 2 而不是 1(linq 真的在玩数据库但它没有创建行吗?)

有日志:

插入 [dbo].Person

值 (@p0)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [值]

-- @p0: 输入 NChar (Size = 10; Prec = 0; Scale = 0) [耶稣]

-- 上下文:SqlProvider(Sql2005) 模型:AttributedMetaModel 构建:3.5.30729.4926

选择 [t0].[Id], [t0].[Name] FROM [dbo].[Person] AS [t0]

-- 上下文:SqlProvider(Sql2005) 模型:AttributedMetaModel 构建:3.5.30729.4926

我真的很困惑,所有的博客/书籍都使用这种sn-p将元素插入数据库。

感谢您的帮助。

【问题讨论】:

  • WAG -- 您有两个数据库实例,一个与 L2S 交互,一个您手动创建数据库行。
  • 你打开交易了吗?
  • 当您在设计器中查看 Person 类时,标识列是否显示为自动生成的值?
  • @Gregoire - LINQ to SQL 自动将所有更改包装在事务中。但是,如果插入失败,它应该抛出异常。
  • @tvanfosson:据我所知,如果您手动设置事务会发生什么,它会覆盖 linq 吗?

标签: c# sql-server linq-to-sql


【解决方案1】:

首先;你有一个TransactionScope 跨越这个,你还没有提交。

但是,更可能的是:这是一个数据库文件,您正在与系统一起部署(而不是单独的数据库服务器)?如果是这样,每次您点击“构建”等时,它都会将解决方案文件夹中的版本复制到构建输出(bin/debug 或 bin/release)中。

查看构建输出副本;看看那个有没有更新。

【讨论】:

  • 如果您使用的是 SQLExpress“用户实例”数据库,这种情况尤其可能发生。
  • 你就是那个。正如我所说,我在课程中练习过 oracle 和 mysql,但我对 Sql Server 提供的所有选项(mdf、sdf 和我认为的服务器内部的一个)感到困惑,我使用 SQL Server CE,因为我想要一些嵌入式支持 LINQ 的数据库。我认为我必须打开并使用 bin 内的库,这很奇怪,但这是解决方案。谢谢。
猜你喜欢
  • 2015-12-17
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多