c# – 在Entity Framework 6中获取标识值
发布时间:2020-12-16 00:11:02 所属栏目:百科 来源:网络整理
导读:我有一个实体Task,它的域类是 public class Task{ public long TaskId { get; set; } // blah blah}public DbSetTask Tasks { get; set; } 我希望TaskId是主键和自动增量.因此我们有 protected override void OnModelCreating(DbModelBuilder modelBuilder)
我有一个实体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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |