Linq To EF (添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)

1:添加记录后,如何获取新添加的ID的值

比如,一个实体 TestEntity   对应一个表TestEntity(ID主键自增,Name,age),使用linq to ef   添加一条记录后,如何获取新记录的ID值?如下代码:

var te = new TestEntity ()
{
Name = "名字",
Age = 21
};
using (EFDbContext context = new EFDbContext())
{
context.TestEntity .Add(te);
context.SaveChanges();
return te.ID;
}
调用SaveChanges()之后,ef.ID的值就是数据库中新加记录对应自增标识列的值。Linq to ef智能地判断出ID就是自增主键标识列。 他给我们返回了。

2:列名叫“ID”的列,它不是自增列,linq to ef不让插入的问题

如标题,就是,列名叫“ID”的列,它不是主键,也不是主键,linq to ef不让插入。我已经给ID赋值了 但它一直提示 ID不能为NULL  ,打断点,看了,也有值!

代码走到SaveChanges(),就报异常,提示ID不能为空!超蛋疼...

原因:默认情况,linq to ef认为只要实体类中有ID属性,数据库对应的是一定是自增标识列。

解决方式:

1)第一步

因为EFDbContex继承自Context类,所以,我们需要从新对它这个叫OnModelCreating的虚函数进行实现

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestEntity>().Property(p => p.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

2)第二步

在实体类叫ID的属性上加标记实现(记得添加引用):

public class TestEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
OK。

原文地址:https://www.cnblogs.com/siyunianhua/p/10068274.html

时间: 2024-08-03 11:24:14

Linq To EF (添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)的相关文章

Entity Framework添加记录时获取自增ID值

var m = new 你的Model(); db.你的Model.add(m); db.SaveChange(); Response.Write(m.Id); //执行.SaveChange()保存后就直接可以取得id值了. 保存前没有id值. Entity Framework在将数据插入数据库时,如果主键字段是自增标识列,会将该自增值返回给实体对象对应的属性. 比如下面添加博客随笔至数据库的示例代码: var blogPost = new BlogPost() { Author = "博客园

Mybatis中插入记录后获取该条记录ID

一.POJO public class User { private Integer userId; private String name; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getName() { return name; } public void setName(String

Django之跨表查询及添加记录

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

iOS 为自定义tableView添加button点击事件后获取其序号

在自定义tableView中,为cell添加button点击事件后,如何获取其对应的序号? 1.创建tableView: 先创建一个成员变量: @interface MyCameraViewController ()<UITableViewDelegate,UITableViewDataSource> { UITableView *_tableView; }@end 在viewDidLoad中初始化 _tableView = [[UITableView alloc] initWithFrame

Bug: 删除中间某条记录后/删除最后一条记录再添加 ,auto-increment的自动增长不连续

问题描述: 现在我删除最后一条记录: 再加上一条新记录: 发现,记录的id不是4而是5. 问题解释: 这是因为作为主键而不得有重复的id值,就算是删掉了,因为设置了auto_increment,为了保持id的自增,他只会接着自己的增长记录走,而不管记录中的每一个值是否还存在. 办法: 删除该列表的主键,然后重新添加它,并设置auto_increment. 可是,当我删除时: ALTER table users PRIMARY KEY; 却出现: 说明删除主键的方法,会影响到列的定义,也就是建表时

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,

使用mybatis注解@Options实现添加记录时返回主键值

官网:http://www.mybatis.org/mybatis-3/index.html 在使用mybatis作为ORM框架时,我通常更喜欢使用注解而非xml配置文件的方式.业务场景:添加记录之后需要返回自己自增长的主键字段值.通常,我们会将DAO层写成如下代码(以添加员工Staff为例): public interface StaffDAO { @InsertProvider(type=StaffProvider.class, method="buildSinleStaff")

mybatis添加记录时返回主键id

参考:https://www.cnblogs.com/nuccch/p/7687281.html 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个目的.鉴于mybatis目前已经支持xml配置和注解2种方式,所以分别给予详细介绍. 数据表设计: drop table if exists `test`; create table `test` ( `id` bigint(20) NOT NU

dnspod 批量添加记录

#!/usr/bin/python #-*- coding: utf-8 -*- import os,requests,json import re,xlsxwriter,time import xlrd #curl -X POST https://dnsapi.cn/Info.Version -d 'login_token=LOGIN_TOKEN&format=json' #时间 date=time.strftime("%Y-%m-%dT%H-%M-%S", time.loc