c# – 在Entity Framework 6中获取标识值

我有一个实体Task,它的域类是

public class Task
{
    public long TaskId { get; set; }
    // blah blah
}
public DbSet<Task> Tasks { get; set; }

我希望TaskId是主键和自动增量.因此我们有

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Task>().Property(x => x.TaskId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).Isrequired();
    }

现在我将数据添加到db

public bool AddTaskTable(int number,string[] params)
    {
        using (dbContext db = new dbContext())
        {
            var t = new Task { blah blah };
            db.Tasks.Add(t);
            try
            {
                db.SaveChanges();
                return true;
            }

我想要的是检索系统生成的TaskId以备将来使用.例如,它是我想在另一个实体中使用它的外键.如何获得价值?

解决方法

我想,当你这样做时:

db.SaveChanges();

实际模型已更改,并添加了Id.因此,如果您在保存后阅读模型,它将显示生成的更新ID.

借鉴这个链中的其他答案,这与我的答案非常相关,并且是对我的实施的解释:

EF创建POCO(普通旧CLR对象)域模型.您的实体模型未处理,但它在内存中.您的新任务T已经在内存中,因此只要SaveChanges方法成功调用,您的对象也包含自动生成的ID.

这是我的存储库实现:

public T Create<T>(T entity) where T : class
        {
            var newEntry = _dbContext.Set<T>().Add(entity);

            _dbContext.SaveChanges();

            return newEntry;
        }

这里,实体被保存,并返回新的Id.

在您的实现中执行此操作:

public bool AddTaskTable(int number,string[] params)
    {
        using (dbContext db = new dbContext())
        {
            var t = new Task { blah blah };
            var dbTask = db.Tasks.Add(t);
            try
            {
                db.SaveChanges();

               // task id
               dbTask.taskId;

                return true;
            }

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...