2013-01-17 63 views
3

我一直在阅读关于EF代码的SO帖子首先生成重复的外键,并试图将解决方案应用于我的代码,但无法修复我的代码。EF代码同一表第一个重复的外键

这里是我的班

public class Schedule 
{ 
    public int Id { get; set; } 
    public ICollection<Appointment> Appointments { get; set; } 
} 

public class Appointment 
{ 
    public int Id { get; set; } 
    public Schedule Schedule { get; set; } 
} 

public class ScheduleConfiguration : EntityTypeConfiguration<Schedule> 
{ 
    public ScheduleConfiguration() 
    { 
     HasKey(s => s.Id); 
     Property(s => s.Id).HasColumnName("SCHEDULEID");    
     ToTable("SCHEDULES"); 
    }   
} 

public class AppointmentConfiguration : EntityTypeConfiguration<Appointment> 
{ 
    public AppointmentConfiguration() 
    { 
     HasKey(a => a.Id); 
     Property(a => a.Id).HasColumnName("APPOINTMENTID");    
     HasRequired(a => a.Schedule).WithMany().Map(x => x.MapKey("SCHEDULEID")); 
     ToTable("APPOINTMENTS"); 
    } 
} 

这在appointments表生成两个外键即SCHEDULEIDSchedule_Id1

我怎么能告诉EF不创建Schedule_Id1

+0

现在FK是Schedule_Id我想成为SCHEDULEID – ZedBee

回答

6

就试试这个:

HasRequired(a => a.Schedule).WithMany(x=> x.Appointment).Map(x => x.MapKey("SCHEDULEID")); 

希望这有助于。

+0

我说这只是命名外键SCHEDULEID代替Schedule_Id这是按照惯例 – ZedBee

+0

创建我更新了 – saber

+0

tnx :)这个问题修复了这个问题..不知道我认为WithMany()应该是空的,如果在配置类中使用的话。我们应该更好地尝试,而不是假设.. – ZedBee

1

您可以使用InverseProperty数据注解物业约会

public class Schedule 
{ 
    public int Id { get; set; } 
    [InverseProperty("Schedule")] 
    public virtual ICollection<Appointment> Appointments { get; set; } 
} 

public class Appointment 
{ 
    public int Id { get; set; } 
    public Schedule Schedule { get; set; } 
} 
+0

同样的问题。 Schedule_Id被创建而不是SCHEDULEID – ZedBee