linq to sql 插入值,以及如何取回自增的ID
linq to sql 在插入值的时候还是很方便。有时候我们需要在插入一个新的实体之后得到那个实体的主键ID的值,这个ID当然必须是自增。一段时间我一直认为直接使用linq to sql的插入机制是不可以在做到的,所以只有使用存储过程的,具体可以查看这篇文章:http://blog.benhall.me.uk/2008/01/custom-insert-logic-with-linq-to-sql.html,但是总是觉得这样太麻烦了。通过观察linq to sql插入之后产生的sql发现,它自动生成了两条语句,一条insert,一条select,而且那条select正好就是查询的最后生成的主键ID,真是不可思议呀。。
下面以一个实际的代码演示一下:
1.新建一个新闻表:
列名 数据类型 允许为NULL 默认值 主键
----------------------------------------------------------------------------
ID int 自增 是
Title nvarchar(200)
PubDate datetime getdate()
Tag nvarchar(200) 是
2.通常的做法就是新建一个Linq to sql 的类文件,然后通过可视化设计器把数据表拖到设计器中,但是这样一"托"永逸的做法是根本不行的,还要需要修改一些地
方,数据库中默认值的字段除了主键在自动生成的linq to sql的类文件中所对应的属性上面的列特性是没有标记IsDbGenerated=true的,这一点是必须要修改的。
在本例中要修改的就是在Pubdate属性把IsDbGenerated=true添加上,当然也可以在可视化的方式修改:
3.下面就来测试linq to sql 中插入值所产生的sql语句:
{
db.Log = new WebApp.DataServer.DebuggerWriter();
News news = new News { Title = "测试" };
db.News.InsertOnSubmit(news);
db.SubmitChanges();
}
对应产生的sql语句:
看的很清楚一条insert ,一条select ,注意select中的字段正式设置了默认生成的字段。如果我们不想让设置了默认值的字段不出现在select语句中我们可以那那个属性上的Column特性上设置AutoSync=AutoSync.Never,比如我们在本例中的Pubdate字段的属性上设置AutoSync=AutoSync.Never,则生成的语句的select字段中就不会出现Pubdate:
4.解决问题:
linq to sql 在插入值的时候会"无缘无故"的时候会产生select语句,真的很神奇,这个select并不是没有用的,从select的意思我们可以看出他正好查询了我们想要的字段的值,但是怎么得到他们呢,明明查询了,现在有什么办法可以得到呢?其实很简单:
{
db.Log = new WebApp.DataServer.DebuggerWriter();
News news = new News { Title = "测试" };
db.News.InsertOnSubmit(news);
db.SubmitChanges();
int newsID = news.ID;
}
就是在提交之后访问那个刚刚插入的实体的ID属性就可以了。
5.下面我们测试一下,如果批量添加能不能得到那些自增的ID?
代码:
{
db.Log = new WebApp.DataServer.DebuggerWriter();
var newsList = new List<News>
{
new News{Title="测试1"},
new News{Title="测试2"},
new News{Title="测试3"},
};
db.News.InsertAllOnSubmit(newsList);
db.SubmitChanges();
var IDList = newsList.Select(n => n.ID);
}
下面是生成的Sql语句:
下面是监视IDList的结果,真是每个新插入数据的ID值:
6.linq to sql还是强大,只是资料太少了,想把linq to sql 搞很明白还是很困难。
转载于:https://www.cnblogs.com/dushouke/archive/2009/06/29/linq-to-sql-retake-Identity-value.html
linq to sql 插入值,以及如何取回自增的ID相关推荐
- vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...
LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列. 本文使用的测试环境是VS 2010,和sql server 2005数据库. ...
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列. 本文使用的测试环境是VS 2010,和sql server 2005数据库. ...
- 【Java】sql实现插入,插入值的主键自增,防止迁移数据时报主键冲突的错误;
一.问题 我们要自己造一些测试数据,并且这些SQL脚本要迁移到其他环境,迁移过程中,如果主键写死,在其他环境,可能会出现主键冲突:所以,我们要写活的主键,实现起来也很简单: 二.解决方法 insert ...
- mybatis插入或更新语句返回自增逐渐id
因为公司的表用的是自增id,而不是UUID,所以在好多时候都需要返回新插入的数据的id,所以在网上搜了一些方法,大部分都是用的xml方式来写的sql,不过本人是用的注解方式,方法比较少,所以写这篇文章 ...
- SQL Server:向 SQL Server 自增字段插入值 (转)
SQL Server:向 SQL Server 自增字段插入值 [鹏城万里] 发表于 www.sqlstudy.com 通常情况下,不能向 SQL Server 自增字段插入值,如果非要这么干的话,S ...
- SQL Server数据库自增字段正确的插入值的描述
我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...
- sql语句往某个字段指定位置追加或者插入值
sql语句往某个字段指定位置追加或者插入值 **业务场景:**需要对数据表中某个字段的值进行修改(对该字段的值进行插入字符串操作) 需要将materiel_features_pic字段值的'.png' ...
- 一步一步学Linq to sql(一):预备知识
从今天起将推出新手讲堂,首先从linq开始详细讲解.一步一步学Linq to sql(一):预备知识 什么是Linq to sql Linq to sql(或者叫DLINQ)是LINQ(.NET语言集 ...
- LINQ to SQL活学活用(1):这要打破旧观念
程序架构 如今比較经典的架构,看看以下图片. 怎样实现 在一个N层应用程序中我们怎样使用LINQ to SQL呢?这给刚刚入门的朋友的确是个难题,使用LINQ to SQL就是ORM技术,能够非常轻松 ...
最新文章
- 【零基础学Java】—抽象方法和抽象类(二十二)
- 频率分布直方图组距如何确定_频率分布有关的概念
- 如何在分组报表中实现组内数据补空行及组内页码
- java webview事件_捕获“页面已完成加载”事件,并使用xwalk Webview在ionic / cordova MainActivity.java中进行操作...
- netconsole 重定向kernel日志到远程服务器
- 3dsmax2021软件安装教程
- Win10磁盘分区工具-无损分区助手
- 解析几何 直线与平面 直线与平面(1.2)
- 7-95 深入虎穴 (树的深搜)
- 程序员和产品经理凡尔赛文学对话
- Java实现Apriori算法
- Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
- 20条技巧,让Chrome超越Firefox (2010-11-16更新)
- 全国计算机竞赛保送清华,全国数学奥赛金牌、保送清华,别人家的孩子了解一下...
- NLP入门概览(8) ——句法分析b:完全句法分析
- 使用easytrader时对xiadan.exe的配置
- 触发了慢日志告警应该怎么办
- 科普 | 生物多样性: 大自然的新陈代谢
- PZT-JH30/1压电薄膜极化实验机(30KV以下压电薄膜试样)
- JAVA 排行榜实现
热门文章
- 听说你,对薪酬待遇不太满意。。。
- 事件溯源|日志记录-一个基础的微服务模式
- 【Linux 报错】com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The las
- vue项目-点击添加或者修改按钮浏览器的屏幕变黑,再次点击屏幕之后浏览器恢复正常(火狐浏览器、ChromeCoreLauncher双核浏览器)
- ui和android有联系,Android单位换算与UI适配
- php怎么定义索引,PHP未定义的索引/变量
- 初始化java工具失败,spring初始化失败解决办法
- python编辑器背景设置为黑色_GitHub 热榜:21 岁理工男开源的这个编辑器火了!...
- linux替换每个英文字开头为大写,shell脚本,文件里面的英文大小写替换方法。...
- ML:MLOps系列讲解之《MLOps原则之测试》解读