entity-framework-extensions - EFPlus BulkInsert - 如何获取数据库生成的 ID
问题描述
使用带有 IDENTITY 列的 MSSQL,在调用 BulkInsert 后如何获取与表 ID 同步的实体 ID?
context.BulkInsert(entities);
两者都没有达到要求的结果:
context.BulkSynchronize(entities);
context.BulkMerge(entities);
假设我们有一个实体
var newSomething = new Something { Id = 0 };
以及对应的TSQL表列定义
ID int IDENTITY(1,1)
实体框架在调用 SaveChanges() 后自动设置 Id
context.SomethingSet.Add(newSomething);
context.SaveChanges();
Assert.IsTrue(newSomething.Id != 0)
EFPlus 如何提供获取插入实体 ID 的方法?
解决方案
免责声明:我是实体框架扩展项目的所有者
默认情况下,该Entity Framework Extensions
库应该已经返回插入实体的 ID。
例如,以下代码在与 BulkInsert 一起使用时应该已经可以工作并返回 id。
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Windows.Forms;
namespace Z.EntityFramework.Extensions.Lab
{
public partial class Form_Request_Ids : Form
{
public Form_Request_DateNull()
{
InitializeComponent();
// CLEAR
using (var ctx = new CurrentContext())
{
ctx.EntitySimples.RemoveRange(ctx.EntitySimples);
ctx.SaveChanges();
}
// TEST
using (var ctx = new CurrentContext())
{
var list = new List<EntitySimple>();
list.Add(new EntitySimple() { Id = 0, IntColumn = 1, CreatedDate = DateTime.Now });
ctx.BulkInsert(list);
}
}
public class CurrentContext : DbContext
{
public CurrentContext()
: base("CodeFirstEntities")
{
}
public DbSet<EntitySimple> EntitySimples { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Types().Configure(x => x.ToTable(GetType().DeclaringType != null ? GetType().DeclaringType.FullName.Replace(".", "_") + "_" + x.ClrType.Name : ""));
base.OnModelCreating(modelBuilder);
}
}
public class EntitySimple
{
public int Id { get; set; }
public int IntColumn { get; set; }
public DateTime CreatedDate { get; set; }
}
}
}
如果您仍有问题,请尝试通过示例 info@zzzprojects.com 直接与我们联系,或在此处发布您的示例。
推荐阅读
- go - 在 Go 中,如何跟踪哪个导入导致变量初始化时发生的错误?
- java - 如何使用 Azure SDK for Java v12 删除单个 Blob 文件?
- c++ - 如果 char 被分配为非字符,则无限循环
- c# - C# 为 System.Single 创建同义类型,其中包含功能子集
- blazor - 当 EditForm 的模型更改时,列表会更新。如何预防?
- java - 如何从 Micronaut 框架中的依赖项中注册控制器?
- django - 尝试编写只读数据库 - 部署在 App Engine (SQLite3 DB) 上的 Django 应用
- python - 将日志附加到文件时出现错误“errorMessage”:“[Errno 30] 只读文件系统:'output.txt'”
- python - 两个总和问题 - Python。请解释解决方案,对我来说没有意义
- java - 使用stream api java计算嵌套元素的数量