Linq To EF 使用小知识(添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)
2017-08-25 16:46
465 查看
1:添加记录后,如何获取新添加的ID的值
比如,一个实体 TestEntity 对应一个表TestEntity(ID主键自增,Name,age),使用linq to ef 添加一条记录后,如何获取新记录的ID值?如下代码:
[csharp] view
plain copy
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的虚函数进行实现
[csharp] view
plain copy
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestEntity>().Property(p => p.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
2)第二步
在实体类叫ID的属性上加标记实现(记得添加引用):
[csharp] view
plain copy
public class TestEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
比如,一个实体 TestEntity 对应一个表TestEntity(ID主键自增,Name,age),使用linq to ef 添加一条记录后,如何获取新记录的ID值?如下代码:
[csharp] view
plain copy
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的虚函数进行实现
[csharp] view
plain copy
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestEntity>().Property(p => p.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
2)第二步
在实体类叫ID的属性上加标记实现(记得添加引用):
[csharp] view
plain copy
public class TestEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
相关文章推荐
- Linq To EF 使用小知识(添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)
- 使用SQL Server 获取插入记录后的ID(自动编号)
- mysql获取刚插入(添加)记录的自动编号id
- Linq to SQL 插入和获取ID
- 使用SQL Server 获取插入记录后的ID(自动编号)
- hibernate中获取使用mysql当前插入一条记录的id值
- VB.NET中使用Linq TO SQL添加数据后获得自增长列ID
- 使用SQL Server 获取插入记录后的ID(自动编号)
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- mysql获取刚插入(添加)记录的自动编号id
- Linq 插入问题 不能添加其键值已在使用中的实体
- mysql获取刚插入(添加)记录的自动编号id
- MySQL使用LAST_INSERT_ID()获取新插入记录的ID
- LINQ to SQL 外键约束的插入及获取主表标识列等问题
- 获取新插入的记录ID
- 插入记录后,获取记录的ID
- LINQ关联表的问题:不能添加其键已在使用中的实体
- Linq to Sql中使用自定义枚举类型的奇怪问题
- 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测
- 数据库中存在nchar类型的列时, 使用Linq to sql的问题