zoukankan      html  css  js  c++  java
  • Entity Framework Code-First(10.2):Entity Mappings

    Entity Mappings using Fluent API:

    Here, we will learn how to configure an entity using Fluent API.

    We will use the following Student and Standard domain classes of the school application.

    public class Student
    {
        public Student()
        { 
            
        }
        public int StudentID { get; set; }
        public string StudentName { get; set; }
        public DateTime? DateOfBirth { get; set; }
        public byte[]  Photo { get; set; }
        public decimal Height { get; set; }
        public float Weight { get; set; }
            
        public Standard Standard { get; set; }
    }
        
    public class Standard
    {
        public Standard()
        { 
            
        }
        public int StandardId { get; set; }
        public string StandardName { get; set; }
        
        public ICollection<Student> Students { get; set; }
       
     }

    Configure Default Schema:

    First, let's configure a default schema for the tables in the database. However, you can change the schema while creating the individual tables. The following example sets the default Admin schema.

    public class SchoolContext: DbContext 
    {
        public SchoolDBContext(): base() 
        {
        }
    
        public DbSet<Student> Students { get; set; }
        public DbSet<Standard> Standards { get; set; }
            
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //Configure default schema
            modelBuilder.HasDefaultSchema("Admin");
        }
    }

    Map Entity to Table:

    Code-First will create the database tables with the name of DbSet properties in the context class - Students and Standards in this case. You can override this convention and can give a different table name than the DbSet properties, as shown below.

    namespace CodeFirst_FluentAPI_Tutorials
    {
            
        public class SchoolContext: DbContext 
        {
            public SchoolDBContext(): base() 
            {
            }
    
            public DbSet<Student> Students { get; set; }
            public DbSet<Standard> Standards { get; set; }
            
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                    //Configure default schema
                modelBuilder.HasDefaultSchema("Admin");
                        
                //Map entity to table
                modelBuilder.Entity<Student>().ToTable("StudentInfo");
                modelBuilder.Entity<Standard>().ToTable("StandardInfo","dbo");
    
            }
        }
    }

    As you can see in the above example, we start with the Entity<TEntity>() method. Most of the time, you have to start with the Entity<TEntity>() method to configure it using Fluent API. We have used ToTable() method to map Student entity to StudentInfo and Standard entity to StandardInfo table. Notice that StudentInfo is in Admin schema and StandardInfo table is in dbo schema because we have specified dbo schema for StandardInfo table.

    table mapping with fluent api Entity Framework code-first

    Map Entity to Multiple Table:

    The following example shows how to map Student entity to multiple tables in the database.

    namespace CodeFirst_FluentAPI_Tutorials
    {
            
        public class SchoolContext: DbContext 
        {
            public SchoolDBContext(): base() 
            {
            }
    
            public DbSet<Student> Students { get; set; }
            public DbSet<Standard> Standards { get; set; }
            
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Student>().Map(m =>
                {
                    m.Properties(p => new { p.StudentId, p.StudentName});
                    m.ToTable("StudentInfo");
    
                }).Map(m => {
                    m.Properties(p => new { p.StudentId, p.Height, p.Weight, p.Photo, p.DateOfBirth});
                    m.ToTable("StudentInfoDetail");
    
                });
    
                modelBuilder.Entity<Standard>().ToTable("StandardInfo");
    
            }
        }
    }

    As you can see in the above example, we mapped some properties of Student entity to StudentInfo table and other properties to StudentInfoDetail table using Map() method. Thus, Student entity will split into two tables, as shown below.

    multiple table mapping with fluent api Entity Framework code-first

    Map method need the delegate method as a parameter. You can pass Action delegate or lambda expression in Map method, as shown below.

    using System.Data.Entity.ModelConfiguration.Configuration;
    
    namespace CodeFirst_FluentAPI_Tutorials
    {
            
        public class SchoolContext: DbContext 
        {
            public SchoolDBContext(): base() 
            {
            }
    
            public DbSet<Student> Students { get; set; }
            public DbSet<Standard> Standards { get; set; }
            
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Student>().Map(delegate(EntityMappingConfiguration<Student> studentConfig)
                {
                    studentConfig.Properties(p => new { p.StudentId, p.StudentName });
                    studentConfig.ToTable("StudentInfo");
                });
    
                Action<EntityMappingConfiguration<Student>> studentMapping = m =>
                {
                    m.Properties(p => new { p.StudentId, p.Height, p.Weight, p.Photo, p.DateOfBirth });
                    m.ToTable("StudentInfoDetail");
                };
                modelBuilder.Entity<Student>().Map(studentMapping);
    
                modelBuilder.Entity<Standard>().ToTable("StandardInfo");
    
            }
        }
    }
  • 相关阅读:
    性能测试之数据准备
    工作笔记
    Ruby on Rails 模型关联(多对多关系)
    oracle 分页查询优化
    mysql命令学习
    mysql 导入导出
    aix 管理网卡
    dataguard没成功创建数据文件
    aix删除网卡
    oracle rac 随笔
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/5644246.html
Copyright © 2011-2022 走看看