[英]EF 5 Inheritance Query Issue
我当前遇到的问题是,Entity Framework 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;
}
}
如果我尝试通过电子邮件地址查询某人 ,则会得到我要找的记录; 但是,如果我通过电子邮件地址查询用户 ,则会得到空结果。
任何建议将不胜感激。
您要找的人是怎么添加的? 保存时将它们添加到“人”集合或“用户”集合中吗? 它们是“用户”还是“人”类型? 这两个表(数据库中的User和Person)的内容是什么。
我已经复制了上面的代码,但是当我添加测试用户时,我添加了以下内容:
_dataContext.Users.Add(new User { Email = emailAddress, LastLoginDate = DateTime.Now });
_dataContext.SaveChanges();
并且两个查询都可以正常工作(它们返回该用户)。
即使我将它们添加为“用户”类型但添加到“人”集合中,两个查询仍然会返回。 唯一不起作用的是,如果我将Person类型添加到Person集合中,那么我会得到上面概述的结果。
我建议将Person类标记为“抽象”,以便将来的开发人员不要试图创建该类型的实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.