只想知道linq到sql自动更新了一个类(表行对象)的ID列后调用SubmitChanges插入到该表的新行,这将是太棒了,任何人都可以证实这一点?在SubmitChanges调用之后,LINQ To SQL是否自动更新LOCAL/CLIENT ID列?
4
A
回答
3
通过查看映射属性的[Column]
属性(如果使用的是外部XML映射文件,则为<Column>
),可以验证上的IDENTITY列将被更新。
有两个属性,这将在[Column]
属性进行设置,IsDbGenerated = true
,和AutoSync = OnInsert
- 第一属性告诉LINQ目标列的值是由数据库中创建诸如用于IDENTITY列或时间戳/ ROWVERSION列,且将后者告诉LINQ用数据库插入后的值更新模型对象。
这两个属性都需要像这样设置,以便发生预期行为。如果您使用SqlMetal或Visual Studio设计器,那么生成的代码通常会自动为您处理,只要列是IDENTITY或TIMESTAMP即可。如果稍后将列更改为IDENTITY类型,则需要重新生成LINQ代码,或者手动更新这些属性。
5
是的,它只要AutoSync
和ColumnAttribute
IsDbGenerated
分别设置为AutoSync.OnInsert
和true
。
这样:
[Column(
Storage="_Id",
AutoSync=AutoSync.OnInsert,
DbType="Int NOT NULL IDENTITY",
IsPrimaryKey=true,
IsDbGenerated=true
)]
这些设置在设计师访问。 AutoSync.OnInsert
和true
是默认设置。
在这里你可以看到在行动这一点:
var db = new MessageDataContext();
db.Log = Console.Out;
Message m = new Message();
m.Text = "Hello, world!";
db.Messages.InsertOnSubmit(m);
db.SubmitChanges();
这里表Message
有两列Id
(自动编号PK列)和Text
。这将导致在控制台上打印以下:
INSERT INTO [dbo].[Message]([Text])
VALUES (@p0)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 13; Prec = 0; Scale = 0) [Hello, world!]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
第二个SQL语句显示DataContext
自动检索分配给我们插入到数据库中Message
身份。
因此:
db.Messages.InsertOnSubmit(m);
db.SubmitChanges();
Console.WriteLine(m.Id);
将打印分配给m
Id
。
相关问题
- 1. 调试LINQ to SQL SubmitChanges()
- 2. Linq-To-Sql SubmitChanges不更新数据库
- 3. linq to sql submitchanges rollback
- 4. Linq to SQL - SubmitChanges函数
- 5. .SubmitChanges()在LINQ to SQL中不起作用
- 6. Linq to SQL Compact - 事务或只是SubmitChanges
- 7. SubmitChanges不更新,但插入新记录。 LINQ to SQL
- 8. linq to sql c#:SubmitChanges()不更新数据库
- 9. Linq-to-Sql SubmitChanges不更新字段...为什么?
- 10. LINQ to SQL:除非调用SubmitChanges,否则DataContext更改不会被反映
- 11. 每个WCF请求使用一个LINQ to SQL DataContext并自动调用SubmitChanges?
- 12. SubmitChanges不“提交”在LINQ to SQL
- 13. Linq-to-SQL SubmitChanges不更新物理数据库
- 14. 如何指示linq to sql在UpdateOnSubmit/SubmitChanges上将表列更新为默认值?
- 15. LINQ to SQL更新
- 16. LINQ to SQL SubmitChanges不工作FILESTREAM表
- 17. 从多线程调用LINQ-to-SQL中的SubmitChanges()
- 18. 用linq-to-sql更新记录列表
- 19. 使用Linq-To-Sql执行存储过程后需要SubmitChanges吗?
- 20. C#Linq-to-SQL在Ado.net之后没有更新插入
- 21. 是否可以在Linq to SQL中使用自动过滤器?
- 22. Linq To SQL:新手之旅
- 23. Linq to SQL - 未能更新
- 24. 批量更新LINQ to SQL
- 25. LINQ不更新上.SubmitChanges()
- 26. 的LINQ to SQL - 更新
- 27. LINQ to SQL - 更新记录
- 28. Linq to SQL更新数据
- 29. Linq to SQL,更新多行
- 30. 更新记录Linq-to-SQL
你可以试试看看会发生什么。如果是这样,那么你甚至可以在这里发布你自己的答案。 – Eilon 2010-01-18 04:28:17