zoukankan      html  css  js  c++  java
  • EF-获取自增ID值

    EF6中,如果将模型类的ID属性设置为主键自增,则我们在外部怎么对其赋值,数据库依然会将该值自增,而不会处理外部给的值。

    如果我们在新增数据之后,需要用到这个自增的ID主键,怎么获取呢?EF6在执行完context.SaveChanges()之后,会自动将这个自增ID主键值从数据库中返回并赋给当前ID属性。其实我们什么都不用操作,直接获取。如下代码:

     using (DemoContext context = new DemoContext()) {
                    //在使用模型类之前需要强制创建数据库 true:强制创建
                    context.Database.Initialize(true);
    
                    #region 新增
    
                    Student stu = new Student {
                        Name = "赵子成",
                        BirthDay = DateTime.Parse("1990-08-01"),
                        Age = 27
                    };
    
                    //新增一个Student实体,相当于在Student表中,新增一条数据
                    context.Students.Add(stu);
    
                    Console.WriteLine("新增之前
    ID={0} Name={1} BirthDay={2} Age={3} 
    ", stu.ID, stu.Name, stu.BirthDay.Value.ToString("yyyy/MM/dd"), stu.Age);
                    //保存
                    context.SaveChanges();
    
                    Console.WriteLine("新增之后
    ID={0} Name={1} BirthDay={2} Age={3}", stu.ID, stu.Name, stu.BirthDay.Value.ToString("yyyy/MM/dd"), stu.Age);
    
    
                    #endregion
    }

    新增过后的结果:

    新增之前
    ID=00000000-0000-0000-0000-000000000000 Name=赵子成 BirthDay=1990/08/01 Age=27
    
    新增之后
    ID=c4049f86-3d74-e711-970d-58fb84575557 Name=赵子成 BirthDay=1990/08/01 Age=27
    

    ID就是Student模型类的自增主键。新增之后可以直接获取该ID值。

    不过有一个算是惯例优先模式的一个小坑。如果我们给某个模型类定义了一个ID属性,如下代码:

    public class Course{
        public int ID{get;set;}
        public string Name{get;set;}  
    }

    在使用EF的时候,EF会将ID当做自增主键去处理。但是这时我们不希望ID是自增主键,只是把它当做一个普通的属性而已。这时要给其增加一个约束特性[DatabaseGenerated(DatabaseGeneratedOption.None)]。代码如下:

    public class Course{
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ID{get;set;}
        public string Name{get;set;}  
    }
  • 相关阅读:
    《剑指 Offer》学习记录:题 14:剪绳子
    网络技术:配置动态路由
    网络技术:配置静态路由
    大一下暑假学习推荐
    Java WEB 程序设计:班级投票系统
    55 内核与应用的分离(下)
    54 内核与应用的分离(中)
    53 内核与应用的分离(上)
    无线数据传输模块的功能
    什么是IO控制器?
  • 原文地址:https://www.cnblogs.com/williamwsj/p/7256808.html
Copyright © 2011-2022 走看看