📅  最后修改于: 2020-11-21 07:27:35             🧑  作者: Mango
继承使创建复杂的模型成为可能,该模型可以更好地反映开发人员的想法,并减少与这些模型进行交互所需的工作。与实体一起使用的继承与与类一起使用的继承具有相同的目的,因此开发人员已经知道此功能的工作原理。
让我们看下面的示例,并创建一个新的控制台应用程序项目。
步骤1-通过右键单击项目名称来添加ADO.NET实体数据模型,然后选择添加→新建项…
步骤2-按照模型优先方法一章中提到的所有步骤,添加一个实体并将其命名为Person。
步骤3-添加一些标量属性,如下图所示。
步骤4-我们将再添加两个实体Student和Teacher ,这两个实体将从Person Table继承属性。
步骤5-现在添加Student实体,然后从Base type组合框中选择Person,如下图所示。
步骤6-类似地添加教师实体。
步骤7-现在将EnrollmentDate标量属性添加到学生实体,并将HireDate属性添加到Teacher实体。
步骤8-让我们继续生成数据库。
步骤9-右键单击设计图面,然后选择“从模型生成数据库…”
步骤10-要创建新的数据库,请单击“新建连接…”,将打开以下对话框。单击确定。
步骤11-单击完成。这将在项目中添加* .edmx.sql文件。您可以通过打开.sql文件在Visual Studio中执行DDL脚本。现在,右键单击并选择执行。
步骤12-转到服务器资源管理器,您将看到该数据库是使用指定的三个表创建的。
步骤13-您还可以看到以下域类也自动生成。
public partial class Person {
public int ID { get; set; }
public string FirstMidName { get; set; }
public string LastName { get; set; }
}
public partial class Student : Person {
public System.DateTime EnrollmentDate { get; set; }
}
public partial class Teacher : Person {
public System.DateTime HireDate { get; set; }
}
以下是Context类。
public partial class InheritanceModelContainer : DbContext {
public InheritanceModelContainer() :
base("name = InheritanceModelContainer") {}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
throw new UnintentionalCodeFirstException();
}
public virtual DbSet People { get; set; }
}
让我们向数据库中添加一些学生和教师,然后从数据库中检索它。
class Program {
static void Main(string[] args) {
using (var context = new InheritanceModelContainer()) {
var student = new Student {
FirstMidName = "Meredith",
LastName = "Alonso",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(student);
var student1 = new Student {
FirstMidName = "Arturo",
LastName = "Anand",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(student1);
var techaer = new Teacher {
FirstMidName = "Peggy",
LastName = "Justice",
HireDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(techaer);
var techaer1 = new Teacher {
FirstMidName = "Yan",
LastName = "Li",
HireDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(techaer1);
context.SaveChanges();
}
}
}
学生和老师将添加到数据库中。 NTO检索的学生和老师,OfType方法需要使用,这将返回学生和教师与指定部门。
Console.WriteLine("All students in database");
Console.WriteLine("");
foreach (var student in context.People.OfType()) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID: {0}, Name: {1}, \tEnrollment Date {2} ",
student.ID, name, student.EnrollmentDate.ToString());
}
Console.WriteLine("");
Console.WriteLine("************************************************************ *****");
Console.WriteLine("");
Console.WriteLine("All teachers in database");
Console.WriteLine("");
foreach (var teacher in context.People.OfType()) {
string name = teacher.FirstMidName + " " + teacher.LastName;
Console.WriteLine("ID: {0}, Name: {1}, \tHireDate {2} ",
teacher.ID, name, teacher.HireDate.ToString());
}
Console.WriteLine("");
Console.WriteLine("************************************************************ *****");
Console.ReadKey();
在第一个查询中,当您使用OfType
执行上述代码后,您将收到以下输出-
All students in database
ID: 1, Name: Meredith Alonso, Enrollment Date 10/30/2015 12:00:00 AM
ID: 2, Name: Arturo Anand, Enrollment Date 10/30/2015 12:00:00 AM
*****************************************************************
All teachers in database
ID: 3, Name: Peggy Justice, HireDate 10/30/2015 12:00:00 AM
ID: 4, Name: Yan Li, HireDate 10/30/2015 12:00:00 AM
*****************************************************************
我们建议您逐步执行上述示例,以更好地理解。