假设我有两个表Meetings和Attendees。 我的数据库看起来像这样。
// Table Meeting
Id
Description
// other properties ...
// Attendee
Id
Name
MeetingId
// other properties ...
我有两个映射到这些表的视图。一种是仅包含会议数据的ViewMeetings,另一种是与参加者一起加入的ViewMeetingAttendees。
我想使用每种类型的表(TPT),将每个表映射到一个视图。
public abstract class MeetingBase
{
// Some properties here
}
public class ViewMeeting : MeetingBase
{
}
public class ViewMeetingAttendee : MeetingBase
{
public String AttendeeName { get;set; }
}
// Configuration
moduleBuilder.Entity<ViewMeeting>().ToTable("ViewMeetings");
moduleBuilder.Entity<ViewMeetingAttendee>().ToTable("ViewMeetingAttendees");
// NOTE fixed the ViewMeeting error as stated in HansVG answer below.
每次我尝试运行此代码时,都会收到错误消息,列名“ Discriminator”无效
我知道实体框架正在尝试将每个类型的类型解析为表格(TPH)。但是,我仍然想使用继承来映射属性,而无需推断TPH。这是合理的,因为除一列外,所有列均相同。我还有其他十列和两个视图。另外,我有一个会议实体,需要对CRUD操作使用大多数相同的列。
有没有办法保留继承但丢失鉴别错误? [NotMapped]不是选项,因为我仍在从数据库中提取数据。另外,我不喜欢使用LINQ在本地连接表,因为有连接的实体不需要映射。
答案 0 :(得分:0)
您两次定义了“ ViewMeeting”,并且未配置“ ViewMeetingAttendee”。 您的配置应为:
moduleBuilder.Entity<ViewMeeting>().ToTable("ViewMeetings");
moduleBuilder.Entity<ViewMeetingAttendee>().ToTable("ViewMeetingAttendees");