【发布时间】: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