zoukankan      html  css  js  c++  java
  • EF6 代码优先,根据model类自动建表

    EF代码优先

    新建一个控制台应用程序,代码如下

    控制台代码

    private static void Main(string[] args)
            {
                //SchoolContext:EF6自动建表的类
                using (var ctx = new SchoolContext())
                {
                    //Student表名
                    var student = new Student() { StudentName = "Bill" };
    
                    //给Student表添加数据
                    ctx.Students.Add(student);
    
                    //给Teachers添加数据
                    ctx.Teachers.Add(new Teacher() { TeacherName="嫖老师",ModeOfTeaching= TeachingMode.ClassRoom });
    
                    //保存操作
                    ctx.SaveChanges();
    
                    //EF6查询动作,FirstOrDefault:取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值
                    var dStu = ctx.Students.Where(x => x.StudentName == "Bill").FirstOrDefault();
    
                    //删除Students表查出来StudentName = "Bill"的数据
                    ctx.Students.Remove(dStu);
    
                    ctx.SaveChanges();
                    
                }
                Console.WriteLine("Demo completed.");
                Console.ReadLine();
            }
    

    这个是后台代码

    //继承DbContext实现EF6的相关操作
    public class SchoolContext : DbContext
        {
            //构造函数,base里写连接数据库语句
            public SchoolContext() : base("Server=.;uid=sa;pwd=123456;database=EFTest;")
            {
                //数据库不存在时重新创建数据库,避免了新建完库后有再次重复该动作
                Database.SetInitializer<SchoolContext>(new CreateDatabaseIfNotExists<SchoolContext>());//
    
                //输出SQL日志
                Database.Log += PrintSql;
            }
            
            public void PrintSql(string sql)
            {
                Console.WriteLine(sql);
            }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                //Adds configurations for Student from separate class
    
                //执行StudentConfigurations里的相关配置
                modelBuilder.Configurations.Add(new StudentConfigurations());
    
                //使Teacher这个model新建的表名为TeacherInfo
                modelBuilder.Entity<Teacher>()
                    .ToTable("TeacherInfo");
    
                modelBuilder.Entity<Teacher>()
                    .MapToStoredProcedures();
            }
    
            /// <summary>
            /// 实例化后可以操作下边表的增删改查
            /// </summary>
            public DbSet<Student> Students { get; set; }
            public DbSet<Grade> Grades { get; set; }
            public DbSet<Course> Courses { get; set; }
            public DbSet<Teacher> Teachers { get; set; }
            public DbSet<StudentAddress> StudentAddresses { get; set; }
        }
    

    StudentConfigurations类的配置

    public class StudentConfigurations : EntityTypeConfiguration<Student>
        {
            public StudentConfigurations()
            {
                this.Property(s => s.StudentName)
                    .IsRequired()
                    .HasMaxLength(50);
    
                this.Property(s => s.StudentName)
                    .IsConcurrencyToken();
    
                // Configure a one-to-one relationship between Student & StudentAddress
    
                //StudentAddress类重写了被Student里的StudentAddress(Address)
                //WithRequired后者包含前者一个不为null的实例
                //https://www.cnblogs.com/suizhikuo/p/4742372.html
                this.HasOptional(s => s.Address) // Mark Student.Address property optional (nullable)
                    .WithRequired(ad => ad.Student); // Mark StudentAddress.Student property as required (NotNull).
            }
        }
    

    其中一个model-Student类

     public class Student
        {
            public int StudentID { get; set; }
            public string StudentName { get; set; }
            public DateTime? DateOfBirth { get; set; }//?代表可以为空
            public decimal Height { get; set; }
            public float Weight { get; set; }
            public byte[] RowVersion { get; set; }
    
            //fully defined relationship
            public int? GradeId { get; set; }
    
            public virtual Grade Grade { get; set; }
    
            public virtual StudentAddress Address { get; set; }
            public virtual ICollection<Course> Courses { get; set; }
        }
    

    github源码下载

    https://github.com/entityframeworktutorial/EF6-Code-First-Demo

    EF增删改的操作

    https://www.cnblogs.com/hao-1234-1234/archive/2018/04/09/8760985.html

    EF 通过DataAnnotations配置属性和类型

    https://www.cnblogs.com/GreenLeaves/p/7589350.html

    EF 如何关闭自动检测_MigrationHistory

    https://blog.csdn.net/weixin_30660027/article/details/97224729

  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/Chen-Ru/p/14113125.html
Copyright © 2011-2022 走看看