EF模型的配置

EF中的模型类的配置有DataAnnotationsFluentAPI 两种。
上面这种在模型类上[Table(“Persons”)]、[Column(“Password”)]这种方式就叫DataAnnotations这种方式比较方便,但是耦合度太高,一般的类最好是POCO(Plain Old C# Object,没有继承什么特殊的父类,没有标注什么特殊的Attribute,没有定义什么特殊的方法,就是一堆普通的属性);不符合大项目开发的要求。
微软推荐使用FluentAPI 的使用方式,因此后面主要用FluentAPI 的使用方式。

FluentAPI 配置

FluentAPI 配置Persons 的方式
假如数据库中有表Students,有Id(主键,自动增长)、Pwd、Name、CreateTime字段。

  1. 创建一个普通的实体类Student包含属性(Id,Pwd,Name,CreateTime)
 public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Pwd { get; set; }
        public DateTime CreateTime { get; set; }
    }

2.创建一个 PersonConfig 类,放到ModelConfig文件夹下(PersonConfig、EntityConfig这样的名字都不是必须的)

 public class StudentConfig:EntityTypeConfiguration<Model.Student>
    {
        public StudentConfig()
        {
            this.ToTable("Students");
        }
    }
  1. 这个类可以立即为配置类,配置实体对象和数据库中表进行映射的一些规则。
    注意:
    (1)实体对象配置类必须继承EntityTypeConfiguration< T>泛型类
    (2) 配置的实体对象是谁泛型类中T就是这个实体对象,一切和配置类的名字无任何关系
    (3) this.ToTable()方法其实就是指这个实体对象在数据库中所映射的表的名字
  2. 创建数据库上下文类(InLettDbContext)
public class InLettDbContext:DbContext
{
    public InLettDbContext() : base("name=con")
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
    }
    public DbSet<Student>Students { get; set; }
}

modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());这行代码代表从这句话所在的程序集加载所有的继承自EntityTypeConfiguration为模型配置类。还有很多加载配置文件的做法(把配置写到OnModelCreating中或者把加载的代码写死到OnModelCreating中),但是这种做法是最符合大项目规范的做法。
和以前唯一的不同就是:模型不需要标注Attribute;编写一个XXXConfig类配置映射关系;DbContext 中override OnModelCreating;
4.测试

private void button1_Click(object sender, EventArgs e)
        {
            using (InLettDbContext context = new InLettDbContext())
            {
                Model.Student stu = new Model.Student()
                {
                    Name = "张三",
                    Pwd = "123",
                    CreateTime = DateTime.Now
                };
                context.Students.Add(stu);
                context.SaveChanges();
            }
        }
已标记关键词 清除标记
相关推荐
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页