• 小白学习之Code First(五)


    Fluent API:另一种配置实体类的方式,它比DataAnnorations提供了更多的配置

    其中EntityTypeConfiguration这个类提供了重要的属性、方法来配置对应的实体类,可以通过protected override void OnModelCreating(DbModelBuilder modelBuilder)的参数获取EntityTypeConfiguration<StudentInfo> studentInfoEntityConfig=new  modelBuilder.Entity<StudentInfo>();列出其中一些方法:

    HasEntitySetName:配置要用于此实体类型的实体集名称。 只能为每个集中的基类型配置实体集名称。

    HasKey:配置此实体类型的主键属性。

    HasMany:实体类型配置一对多关系。

    HasOptional:实体类型配置可选关系。 实体类型的实例将能保存到数据库,而无需指定此关系。数据库中的外键可为 null。

    HasRequired:配置必须的关系,如果配置关系,实体无法保存到数据库中,外键不能为空。

    HasTableAnnotation:在实体映射到的表的模型中设置注释。 稍后可在处理表时(如创建迁移时)使用此注释值。

    Ignore:从模型中排除某个属性,使该属性不会映射到数据库。

    Map:允许与此实体类型映射到数据库架构的方式相关的高级配置。 默认情况下,任何配置都还会应用于从此实体类型派生的任何类型。

    MapToStoredProcedures:将此类型配置为使用插入、更新和删除的存储过程。 将使用过程名称和参数名称的默认约定。

    Property:配置在此类型上定义的属性。

    ToTable:配置此实体类型映射到的表名。

    实体:

     1     public  class StudentInf
     2     {
     3         public int SID { get; set; }
     4         public string SName { get; set; }
     5         public int Age { get; set; }
     6         public string Address { get; set; }
     7         public DateTime BirthDay { get; set; }
     8         public ClassInf ClassInf { get; set; }
     9     }
    10     public class ClassInf
    11     {
    12         public int CID { get; set; }
    13         public string CName { get; set; }
    14         public virtual ICollection<StudentInf> StudentInfs { get; set; }
    15     }
    View Code

    配置:

    (图1)

    (图2)

    (图3)

     1   public CSContext1():base("name=ConnStr")
     2         {
     3         }
     4         public DbSet<ClassInf> ClassInfs { get; set; }
     5         public DbSet<StudentInf> StudentInfs { get; set; }
     6         protected override void OnModelCreating(DbModelBuilder modelBuilder)
     7         {
     8             EntityTypeConfiguration<StudentInf> SConfig = modelBuilder.Entity<StudentInf>();
     9             EntityTypeConfiguration<ClassInf> CConfig = modelBuilder.Entity<ClassInf>();
    10             //将实体映射成自定义名称的表 图1
    11             //SConfig.ToTable("Student");
    12             //CConfig.ToTable("Class");
    13             //设置主键、复合主键
    14             SConfig.HasKey(S => new {S.SID,S.SName});
    15             CConfig.HasKey(c => c.CID);
    16             //拆分表 图2
    17             //SConfig.Map(m => {
    18             //    m.Properties(p => p.ID);
    19             //    m.Properties(p => p.SName);
    20             //    m.ToTable("StudentMaster");
    21             //}).Map(m => {
    22             //    m.Properties(p => p.ID);
    23             //    m.Properties(p => p.Address);
    24             //    m.Properties(p => p.Age);
    25             //    m.Properties(p => p.BirthDay);
    26             //    m.ToTable("StudentDetial");
    27             //});
    28             //设置列属性 图3
    29             SConfig.Property(s => s.Address).HasColumnName("地址").HasColumnOrder(5).HasColumnType("Nvarchar").IsUnicode(true).IsOptional().HasMaxLength(300);
    30             //设置存储过程 图3
    31             CConfig.MapToStoredProcedures(m => m.Update(u =>
    32             {
    33                 u.HasName("Class_procedure").Parameter(c => c.CName, "ClassName");
    34             }));
    35             Database.SetInitializer(new DropCreateDatabaseIfModelChanges<CSContext1>());
    36             base.OnModelCreating(modelBuilder); 
    37         }
    MapToStoredProcedures 上图中只自定义了Update的存储过程,而insert和Delete的存储过程自动生成默认的
    1        static void Main(string[] args)
    2         {
    3             var context = new CSContext1();
    4             context.StudentInfs.ToList();
    5             Console.WriteLine("OK");
    6             Console.ReadKey();
    7         }
  • 相关阅读:
    php 循环
    php 函数
    bzoj4541 [Hnoi2016]矿区
    bzoj4836 [Lydsy2017年4月月赛]二元运算
    bzoj4555 [Tjoi2016&Heoi2016]求和
    COGS2287 [HZOI 2015]疯狂的机器人
    bzoj3142 [Hnoi2013]数列
    bzoj4318 OSU!
    bzoj4247 挂饰
    bzoj2756 [SCOI2012]奇怪的游戏
  • 原文地址:https://www.cnblogs.com/oren/p/7342917.html
Copyright © 2020-2023  润新知