2014-01-13 67 views
0

我目前遇到一個問題,實體框架5沒有返回一個記錄,當該實體從具有我查詢的屬性的實體派生時存在。EF 5繼承查詢問題

這是我的實體:

public class Person 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Email { get; set; } 
} 

public class User : Person 
{ 
    public DateTime LastLoginDate { get; set; }  
} 

我的數據上下文:

public class DataContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Person> Persons { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().Map(m => { m.ToTable("User"); }); 

     modelBuilder.Entity<Person>() 
        .Property(x => x.Id) 
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
    } 
} 

庫:

public class UserRepository 
{ 
    private readonly DataContext _dataContext; 

    public UserRepository(DataContext dataContext) 
    { 
     _dataContext = dataContext; 
    } 

    public User GetByEmailAddress(string emailAddress) 
    { 
     if (string.IsNullOrEmpty(emailAddress)) 
      throw new ArgumentException("The emailAddress parameter cannot be null or empty.", "emailAddress"); 

     //This query works 
     var working = _dataContext.Persons 
      .FirstOrDefault(x => x.Email.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)); 

     //Where as this returns null 
     var query = _dataContext.Users 
       .FirstOrDefault(x => x.Email.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)); 

     return query; 
    } 
} 

如果我試圖通過電子郵件地址我用來查詢獲得我正在尋找的記錄;但是,如果我通過電子郵件地址查詢用戶,我得到一個空結果。

任何建議將不勝感激。

回答

1

你在找什麼人加入?他們是否在保存後添加到Persons集合或Users集合中?他們是用戶還是個人?這兩個表的內容是什麼(數據庫中的User和Person)。

我已經重複上面的代碼,但是當我加入了測試用戶我說這樣的:

_dataContext.Users.Add(new User { Email = emailAddress, LastLoginDate = DateTime.Now }); 
_dataContext.SaveChanges(); 

而且這兩個查詢工作的罰款(他們返回該用戶)。

即使我將它們作爲用戶類型添加到Person集合中,仍然會返回兩個查詢。唯一不行的是,如果我將Person類型添加到Person集合中,那麼我會得到上面概述的結果。

我建議標記人員類「抽象」,以便未來的開發人員不試圖創建該類型的實例。