繁体   English   中英

EF 5继承查询问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM