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

最新文章

  1. sae评测报告-2013最新版
  2. 摄像头/光驱故障:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码 19)
  3. SpringMvc+Mybatis 框架搭建
  4. HttpServletRequest 中 getRequestURL和getRequestURI的区别
  5. Linux下smba服务端的搭建和客户端的使用
  6. nodejs ctrl+B 快捷键设置
  7. 网络基础---OSI 模型与TCP/IP
  8. PHP限制网页只能在微信内置浏览器中查看并显示
  9. (转)使用string.Format需要注意的一个性能问题
  10. 11.3、Libgdx的音频之播放PCM音频
  11. layer.open参数;layer.open关闭事件;layer.open关闭刷新;layer.open获取子页的值;layer.open调用子页面的方法
  12. spring boot(一)入门
  13. 【SoapUI】比较Json response
  14. SQL数据库数据类型详解
  15. swift直接赋值与引用赋值都会触发willSet
  16. 使用mdadm创建磁盘RAID10整列,RAID5出现故障,自动替换硬盘
  17. linux kernel.shmall shemax shemin解释
  18. 基于.Net平台C#的微信网页版API
  19. 开发技巧:高效的使用 Response.Redirect
  20. GitHub官方Markdown语法教程

热门文章

  1. BP神经网络的直观推导与Java实现
  2. [转载]表单校验之datatype
  3. 关于字符串split一些用法
  4. 每日linux命令学习-sed
  5. 【react开发】使用swiper插件,loop:true时产生的问题解决方案
  6. eclipse的svn插件添加代理访问svn
  7. Golang错误处理函数defer、panic、recover、errors.New介绍
  8. layui使用iconfont
  9. Babel总结
  10. PID算法控制简单理解