2012-10-16 59 views
1

使用EF5代码首先流利的API我在加载对象时收到此错误:“无效的列名Doctor_ID”。实体框架5无效的列名

public class User 
{ 
    public int ID { get; set; } 
    ... 
} 

public class Doctor : User 
{ 

    public int? TitleID { get; set; } 
    public virtual Title Title { get; set; } 
} 


public class UserMap : EntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     this.ToTable("User", "Users"); 

     // Primary Key 
     this.HasKey(t => t.ID); 

     ... 

    } 
} 

public class DoctorMap : EntityTypeConfiguration<Doctor> 
{ 
    public DoctorMap() 
    { 
     // Table & Column Mappings    
     this.ToTable("Doctor", "Doctors"); 

     //this.Property(t => t.ID).HasColumnName("ID"); 
     this.Property(t => t.TitleID).HasColumnName("TitleID");    

     // Relationships 
     this.HasOptional(t => t.Title) 
      .WithMany(t => t.Doctors) 
      .HasForeignKey(d => d.TitleID); 

    } 
}  

代码成功执行下列:

return (from item in this.DataProvider.Users 
        where 
         item.Username == username && item.Password == password 
        select new UserBasicInfo() { ID = item.ID, FirstName = item.FirstName, LastName = item.FirstName, Username = item.Username }).FirstOrDefault(); 

在此之后的代码执行,其导致“无效的列名Doctor_ID”异常下列:

User user = this.DataProvider.Users.SingleOrDefault(item => item.ID == id); 

的代码的第一行仅从用户表中获取数据,这就是为什么它成功执行,但为什么第二个EF5访问它时未能将ID用作Doctor表的键?

注:我正在使用每种类型的TPT类型。

+0

了'Doctor'类是否有一个ID?我没有做过太多的代码第一件事,但它似乎是需要的映射工作。 – Gromer

回答

2

我不认为问题出在上面的代码上。我无法复制您的错误,并且CodeFirst从未在任何表上生成Doctor_ID列。还有没有其他的关系,你没有在这里显示被映射?

这里就是整个控制台应用程序:

public class User 
{ 
    public int ID { get; set; } 
} 

public class Doctor : User 
{ 
    public int? TitleID { get; set; } 
    public virtual Title Title { get; set; } 
} 
public class Title 
{ 
    public int TitleId { get; set; } 
    public ICollection<Doctor> Doctors { get; set; } 
} 

public class UserMap : EntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     this.ToTable("User", "Users"); 

     // Primary Key 
     this.HasKey(t => t.ID); 
    } 
} 

public class DoctorMap : EntityTypeConfiguration<Doctor> 
{ 
    public DoctorMap() 
    { 
     // Table & Column Mappings    
     this.ToTable("Doctor", "Doctors"); 

     //this.Property(t => t.ID).HasColumnName("ID"); 
     this.Property(t => t.TitleID).HasColumnName("TitleID"); 

     // Relationships 
     this.HasOptional(t => t.Title) 
      .WithMany(t => t.Doctors) 
      .HasForeignKey(d => d.TitleID); 

    } 
} 
public class Model : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Doctor> Doctors { get; set; } 
    public DbSet<Title> Titles { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new DoctorMap()); 
     modelBuilder.Configurations.Add(new UserMap()); 
    } 
} 

class Program 
{ 
    public static void Main() 
    { 
     Model m = new Model(); 
     //var doctor = new Doctor(); 
     //m.Doctors.Add(doctor); 
     //m.SaveChanges(); 
     var user = m.Users.SingleOrDefault(item => item.ID == 1); 

     Console.WriteLine(user.ID); 
     Console.ReadLine(); 
    } 

} 

其中创建该数据库:

enter image description here

+0

谢谢,我会尝试删除关系并逐个添加它们,以查看其中一个是否会导致此问题。 – MWKZ

+1

删除obj和bin文件夹解决了这个问题! – MWKZ