#c# #entity-framework-6 #ef-code-first
Вопрос:
Я использую EF6. У меня есть три сущности (некоторые поля выделены для ясности)
- Пользователь базы данных:
[Table("Users")] public class DbUser { [Key] public Guid UserId { get; set; } public List<DbSeries> UserSeries { get; set; } public List<DbPlot> Plots { get; set; } }
- DbSeries:
[Table("Series")] public class DbSeries { [Key] public Guid SeriesId { get; set; } public DbPlot ThermalPlot { get; set; } }
- DbPlot:
[Table("Plots")] public class DbPlot { [Key] public Guid PlotId { get; set; } public Guid CurrentUserId { get; set; } public DbUser CurrentUser { get; set; } public virtual DbSeries Series { get; set; } }
Их отношения были настроены следующим образом:
modelBuilder.Entity<DbUser>()
.HasMany(s => s.UserSeries)
.WithRequired(g => g.CurrentUser)
.HasForeignKey(s => s.CurrentUserId);
modelBuilder.Entity<DbUser>()
.HasMany(s => s.Plots)
.WithRequired(g => g.CurrentUser)
.HasForeignKey(s => s.CurrentUserId);
modelBuilder.Entity<DbPlot>()
.HasOptional(x => x.Series)
.WithOptionalDependent(s => s.ThermalPlot)
.Map(x => x.MapKey("SeriesId"));
Как вы можете видеть, в таблице графиков в базе данных есть поле SeriesId, но оно не представлено в модели C#. Как настроить такое отношение, чтобы оно имело фактическое свойство SeriesId в модели C#. Основная идея этой конфигурации заключается в том, что DbPlot всегда принадлежит какому-либо пользователю, но также может быть указано, что он принадлежит к какой-либо серии, но это необязательно.