我们经常使用数据表中的类别字段来分辨所存记录的类型,在对象场景下,我们一般会将其演化为有继承关系的一组对象,以符合面向对象的设计和使用,那么我们在Entity Framework环境中如何来实现这样的实体关系呢?这里将通过一些例子,来说明一般场景下的使用方式。
场景一:数据表Peoples记录了一些人,每个人都有唯一的工作类别,在该场景下,我们需要按照工作类别来构建一组对象,使得人根据工作类别进行了分类。
首先创建数据表如图:
填充数据如下:
[假设我们只对人进行四种分类(演员、商人、程序员、运动员)]
现在我们使用VS2008从数据库创建PeopleModel.edmx模型,如图:
VS2008自动为我们创建了一个实体People,但是我们在这个场景下,需要有一个依据工作类别区分的对象层次,因此我们加入新的实体Actor(演员), Businessman(商人), Developer(程序员), Sporter(运动员) 他们都继承自People(创建实体时,指定其基类型为People), 如图:
创建后,我们得到了如下的模型:
现在,我们从People实体中删除JobCategory的映射,因为我们需要使用JobCategory来区别People的子类,而不是作为People的属性。设置People实体为抽象的(我们假设每一个人都有工作,呵呵)。
然后,使用VS2008中的"映射详细信息"视图,为每个子类设置其映射的表和条件。
每个子类都类似修改完毕后,我们的模型就大功告成了 。
1 <EntityType Name="Peoples">
2 <Key>
3 <PropertyRef Name="PeopleID" />
4 </Key>
5 <Property Name="PeopleID" Type="nvarchar" Nullable="false" MaxLength="50" />
6 <Property Name="PeopleName" Type="nvarchar" Nullable="false" MaxLength="50" />
7 <Property Name="JobCategory" Type="nvarchar" Nullable="false" MaxLength="50" StoreGeneratedPattern="Computed"/>
8 </EntityType>
下面我们就可以通过代码来验证我们的模型了。
class Program
{
public static void Main(string[] args)
{
QueryDevelopers();
Console.ReadLine();
}
private static void QueryDevelopers()
{
using (var context = new PeopleEntities())
{
var query = from c in context.Peoples
where c is Developer
select c;
foreach(var c in query)
{
Console.WriteLine("Actor Name : {0}", c.PeopleName);
}
}
}
}
场景一:数据表Peoples记录了一些人,每个人都有唯一的工作类别,在该场景下,我们需要按照工作类别来构建一组对象,使得人根据工作类别进行了分类。
首先创建数据表如图:
填充数据如下:
[假设我们只对人进行四种分类(演员、商人、程序员、运动员)]
现在我们使用VS2008从数据库创建PeopleModel.edmx模型,如图:
VS2008自动为我们创建了一个实体People,但是我们在这个场景下,需要有一个依据工作类别区分的对象层次,因此我们加入新的实体Actor(演员), Businessman(商人), Developer(程序员), Sporter(运动员) 他们都继承自People(创建实体时,指定其基类型为People), 如图:
创建后,我们得到了如下的模型:
现在,我们从People实体中删除JobCategory的映射,因为我们需要使用JobCategory来区别People的子类,而不是作为People的属性。设置People实体为抽象的(我们假设每一个人都有工作,呵呵)。
然后,使用VS2008中的"映射详细信息"视图,为每个子类设置其映射的表和条件。
每个子类都类似修改完毕后,我们的模型就大功告成了 。
1 <EntityType Name="Peoples">
2 <Key>
3 <PropertyRef Name="PeopleID" />
4 </Key>
5 <Property Name="PeopleID" Type="nvarchar" Nullable="false" MaxLength="50" />
6 <Property Name="PeopleName" Type="nvarchar" Nullable="false" MaxLength="50" />
7 <Property Name="JobCategory" Type="nvarchar" Nullable="false" MaxLength="50" StoreGeneratedPattern="Computed"/>
8 </EntityType>
下面我们就可以通过代码来验证我们的模型了。
Code
class Program
{
public static void Main(string[] args)
{
QueryDevelopers();
Console.ReadLine();
}
private static void QueryDevelopers()
{
using (var context = new PeopleEntities())
{
var query = from c in context.Peoples
where c is Developer
select c;
foreach(var c in query)
{
Console.WriteLine("Actor Name : {0}", c.PeopleName);
}
}
}
}
class Program
{
public static void Main(string[] args)
{
QueryDevelopers();
Console.ReadLine();
}
private static void QueryDevelopers()
{
using (var context = new PeopleEntities())
{
var query = from c in context.Peoples
where c is Developer
select c;
foreach(var c in query)
{
Console.WriteLine("Actor Name : {0}", c.PeopleName);
}
}
}
}
class Program
{
public static void Main(string[] args)
{
QueryDevelopers();
Console.ReadLine();
}
private static void QueryDevelopers()
{
using (var context = new PeopleEntities())
{
var query = from c in context.Peoples
where c is Developer
select c;
foreach(var c in query)
{
Console.WriteLine("Actor Name : {0}", c.PeopleName);
}
}
}
}
转载于:https://www.cnblogs.com/crossingdawn/archive/2009/07/23/1529225.html