public class EF6RecipesContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public EF6RecipesContext()
: base("name=EF6CodeFirstRecipesContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Employee>()
.Map<FullTimeEmployee>(m => m.Requires("EmployeeType").HasValue(1))
.Map<HourlyEmployee>(m => m.Requires("EmployeeType").HasValue(2));//如果去掉这两个map,会发现程序也能正常运行,并且在Employee表中生成了一个额外属性“Discriminator”
}
}
1 using (var context = new EF6RecipesContext())
2 {
3 var fte = new FullTimeEmployee
4 {
5 FirstName = "Jane",
6 LastName = "Doe",
7 Salary = 71500M
8 };
9 context.Employees.Add(fte);
10 fte = new FullTimeEmployee
11 {
12 FirstName = "John",
13 LastName = "Smith",
14 Salary = 62500M
15 };
16 context.Employees.Add(fte);
17 var hourly = new HourlyEmployee
18 {
19 FirstName = "Tom",
20 LastName = "Jones",
21 Wage = 8.75M
22 };
23 context.Employees.Add(hourly);
24 context.SaveChanges();
25 }
26 using (var context = new EF6RecipesContext())
27 {
28 Console.WriteLine("--- All Employees ---");
29 foreach (var emp in context.Employees)
30 {
31 bool fullTime = emp is HourlyEmployee ? false : true;
32 Console.WriteLine("{0} {1} ({2})", emp.FirstName, emp.LastName,
33 fullTime ? "Full Time" : "Hourly");
34 }
35 Console.WriteLine("--- Full Time ---");
36 foreach (var fte in context.Employees.OfType<FullTimeEmployee>())
37 {
38 Console.WriteLine("{0} {1}", fte.FirstName, fte.LastName);
39 }
40 Console.WriteLine("--- Hourly ---");
41 foreach (var hourly in context.Employees.OfType<HourlyEmployee>())
42 {
43 Console.WriteLine("{0} {1}", hourly.FirstName, hourly.LastName);
44 }
45 }