我有这个简单的课程:
CREATE TABLE [dbo].[Movie] (
[MovieId] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (200) NULL,
[Genre] NVARCHAR (200) NULL,
[Date] DATE NULL,
[Price] DECIMAL (18, 2) NULL,
CONSTRAINT [PK_dbo.Movies] PRIMARY KEY CLUSTERED ([MovieId] ASC)
);
现在我想实现一个SpecialMovie
...,它有一个名为Special
的附加属性。
我正在使用数据库优先方法。
我试图找到一些教程,但没有什么是真正有用的。
我有一本SQL Server 2008书,它没有说继承......在SQL中,继承不是一件重要的事情吗?它有点奇怪,它对继承没有任何意义....
答案 0 :(得分:-3)
在EF中实现继承与普通类继承完全相同,因此在这种情况下:
public class Movie
{
public int MovieID {get; set;}
//.....
}
public class SpecialMovie : Movie
{
public int SpecialMovieID {get; set;}
//.....
}
public class MovieContext : DbContext
{
public DbSet<SpecialMovie> SpecialMovies { get; set; }
public DbSet<Movie> Movies{ get; set; }
}
请注意,在SQL Server等关系数据库中实际上没有相应的继承结构。因此,EF将以多种方式实现继承。每个层次结构表可能是性能最高但它会使数据非规范化,以便SpecialMovie和Movie类的数据驻留在同一个表中,EF添加一个descriminator字段来区分这两个类。 EF还提供每种类型的表格和每种混凝土类型的表格。这里有三个很好的描述http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx。