我的实体看起来像 -
[Table("DoctorSchedule")]
public class DoctorSchedule
{
[Key]
public int Id {get; set;}
[Column("DoctorId")]
public virtual Doctor Doctor { get; set; }
public virtual ICollection<Schedule> Schedules { get; set; }
}
public class Schedule
{
public DayOfWeek Day { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
[Required]
public DoctorSchedule DoctorSchedule { get; set; }
}
我想如上所述,但SQL表应该是One。表格应为“DoctorSchedule”,列为“Id”,“DoctorId”,“Day”,“StartTime”,“EndTime”。
请使用数据注释或FluentAPI建议代码。
答案 0 :(得分:0)
从研究看来,为了每个表有多个实体,它们需要相互继承。我不确定这是否会让你做你想做的事,但我测试了它,实体框架没有抱怨,并且表已成功创建。同样,这有效并且允许创建模型和关系,因为我不知道您的需求是什么,您必须自己测试它以确定它是否满足您的需要。祝你好运!
你似乎也想要一个Doctor实体,但没有提供任何关于它的信息,所以我没有尝试用Doctor类做任何事情。
public class DoctorSchedule
{
public int DoctorSchedule_Id { get; set; }
//[Column("DoctorId")]
//public virtual Doctor Doctor { get; set; }
public virtual ICollection<Schedule> Schedules { get; set; }
}
public class Schedule : DoctorSchedule
{
public DayOfWeek Day { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public int Schedule_Id { get; set; }
public int DoctorSchedule_FK { get; set; }
public DoctorSchedule DoctorSchedule { get; set; }
}
这是我尝试过的DbContext / Fluent API
public class DocContext : DbContext
{
public DbSet<DoctorSchedule> DoctorSchedules { get; set; }
public DbSet<Schedule> Schedules { get; set; }
protected override void OnModelCreating(DbModelBuilder mb)
{
//DoctorSchedule Mappings
//
mb.Entity<DoctorSchedule>()
.ToTable("DoctorSchedule")
.HasKey(ds => ds.DoctorSchedule_Id);
mb.Entity<DoctorSchedule>()
.Property(ds => ds.DoctorSchedule_Id)
.HasColumnName("DoctorSchedule_Id")
.HasColumnType("int")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
mb.Entity<DoctorSchedule>()
.HasMany(ds => ds.Schedules)
.WithRequired(s => s.DoctorSchedule)
.HasForeignKey(s => s.DoctorSchedule_FK);
//Schedule Mappings
//
mb.Entity<Schedule>()
.ToTable("DoctorSchedule")
.HasKey(s => s.Schedule_Id); //It seems like a compound key is needed
mb.Entity<Schedule>()
.Property(ds => ds.Schedule_Id)
.HasColumnName("Schedule_Id")
.HasColumnType("int")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
mb.Entity<Schedule>()
.Property(s => s.Day)
.HasColumnName("Day")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
mb.Entity<Schedule>()
.Property(s => s.StartTime)
.HasColumnName("StartTime")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
mb.Entity<Schedule>()
.Property(s => s.EndTime)
.HasColumnName("EndTime")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
mb.Entity<Schedule>()
.Property(ds => ds.DoctorSchedule_FK)
.HasColumnName("DoctorSchedule_FK")
.HasColumnType("int")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}