小白学习之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         }
原文地址:https://www.cnblogs.com/oren/p/7342917.html