2010-03-18 151 views
1

我在这里有一点点/奇怪的行为,我在网上查找,所以我没有找到答案。Linq to SQL没有将数据插入到数据库

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

无论如何,我的应用程序插入数据时遇到了问题,我只是创建了一个非常简单的项目,用于测试并且没有解决方案。

我与SQL Server的实例数据库

标识 - INT(标识主键) 名称 - 的nchar(10)(NOT NULL)

的表称为 “人”,就这么简单馅饼。

我有这样的:

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与数据库玩,但它没有创建行?)

有日志:

INSERT INTO [DBO] .Person

VALUES(@ p0)

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

- @ p0:Input NChar(Size = 10; Prec = 0;标度= 0)[耶稣]

- 上下文:sqlProvider的(SQL2005)型号:AttributedMetaModel体形:3.5.30729.4926

SELECT [T0] [ID],[T 0] [姓名] FROM [。 DBO] [人] AS [T 0]

- 语境:sqlProvider的(SQL2005)型号:AttributedMetaModel体形:3.5.30729.4926

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

谢谢你的帮助。

+0

WAG - 您有两个数据库实例,一个是L2S正在与之交互,另一个是您手动创建数据库行。 – Will 2010-03-18 16:22:28

+0

Heve您打开了一个事务吗? – Gregoire 2010-03-18 16:23:18

+0

当您查看设计器中的Person类时,标识列是否显示为自动生成的值? – tvanfosson 2010-03-18 16:23:37

回答

4

首先;你有一个TransactionScope跨越这个,你还没有承诺。

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

查看构建输出副本;看看是否已更新。

+0

如果您正在使用SQLExpress“用户实例”数据库,这尤其可能。 – pblasucci 2010-03-18 16:29:54

+0

你是唯一。正如我所说的,我在课程中使用了oracle和mysql,但是我对Sql Server所提供的所有选项(mdf,sdf和服务器内部的一个选项我都认为)感到困惑,因为我想用一些嵌入式SQL服务器DB支持LINQ。我认为我必须打开并使用bin内部的lib,这很奇怪,但它是解决方案。谢谢。 – 2010-03-18 16:43:13