• 【译】第23节---Fluent API


    原文:http://www.entityframeworktutorial.net/code-first/configure-entity-mappings-using-fluent-api.aspx

    本节,我们将学习如何使用Fluent API配置实体。

    我们将使用以下学校app的Student和Standard类:

    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; } 
    }

    配置默认模式

    首先,我们为数据库中的表配置默认模式。 当然,你可以在创建单个表时更改模式。 以下示例设置默认管理模式:

    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");
        }
    }

    映射实体到表

    Code-First将在上下文类中创建名称为DbSet属性的数据库表---本例中为Students和Standards。 你可以覆盖此约定,可以给出与DbSet属性不同的表名称,如下所示:

    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");
    
            }
        }
    }

    如上例所示,我们从Entity <TEntity>()方法开始。

    大多数情况下,你必须从实体<TEntity>()方法开始,使用Fluent API进行配置。

    我们使用ToTable()方法将Student实体映射到StudentInfo表,Standard实体到StandardInfo表。注意,StudentInfo位于Admin模式中,并且StandardInfo表位于dbo模式中,因为我们为StandardInfo表指定了dbo模式。

    映射实体到多个表

    以下示例显示如何将Student实体映射到数据库中的多个表:

    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");
    
            }
        }
    }

    如上例所示,我们使用Map()方法将Student实体的某些属性映射到StudentInfo表,其他属性映射到StudentInfoDetail表。

    因此,Student实体将分成两个表,如下所示:

    Map方法需要将delegate方法作为参数。 您可以在Map方法中传递Action delegate或lambda表达式,如下所示:

    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");
    
            }
        }
    }
  • 相关阅读:
    java 中的Debug eclipse 开发工具使用
    google 浏览器的Debug 调试工具使用
    java 实现word 转 pdf
    你好啊 未来的自己
    java 实现在线阅读 .pdf
    java 的在线下载文件 .pdf
    Java 实现手机发送短信验证码
    Java 实现发送邮件
    Java 实现邮件的发送
    沃尔沃投资两家以色列科技创企 布局人工智能
  • 原文地址:https://www.cnblogs.com/talentzemin/p/7268345.html
Copyright © 2020-2023  润新知