Редактировать: Разделить таблицу на более чем две сущности в коде сначала очень проблематично.Он работает без каких-либо проблем при использовании EDMX.
Чтобы заставить его работать, вы должны убедиться, что каждая сущность, используемая для разделения таблицы, имеет действительное отношение один к одному со всеми другими сущностями, используемыми для разделения таблицы.Это также означает порчу вашей модели со свойствами навигации и, кроме того, обеспечение того, чтобы при сохранении все свойства навигации, указывающие на один и тот же тип сущности, ссылались на один и тот же экземпляр (в противном случае вы получите исключение во время вызова SaveChanges
).
Так чтоРешение для вашего примера должно быть примерно таким:
public class Campaign {
[Key]
public int CampaignId {get;set;}
public string Name {get;set;}
public virtual CampaignSurvey Survey {get;set;}
public virtual CampaignFeedback Feedback {get;set;}
}
public class CampaignSurvey {
[Key]
public int CampaignId {get;set;}
public string Question {get;set;}
public string Answer {get;set;}
public virtual CampaignFeedback Feedback {get;set;}
}
public class CampaignFeedback {
[Key]
public int CampaignId {get;set;}
public string Feedback {get;set;}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Campaign>().HasRequired(c => c.Survey).WithRequiredPrincipal();
modelBuilder.Entity<Campaign>().HasRequired(c => c.Feedback).WithRequiredPrincipal();
modelBuilder.Entity<CampaignSurvey>().HasRequired(c => c.Feedback).WithRequiredPrincipal();
modelBuilder.Entity<Campaign>().ToTable("Campaign");
modelBuilder.Entity<CampaignSurvey>().ToTable("Campaign");
modelBuilder.Entity<CampaignFeedback>().ToTable("Campaign");
}
Я даже не уверен, как это будет работать в реальном сценарии.Вы можете найти некоторые другие проблемы при его использовании.