实体框架,而不是查询

时间:2015-09-15 08:45:53

标签: c# entity-framework dbcontext

我正在创建一个实体模型,我想在其中放置一个未映射的属性。这些属性可以简化从关系中访问值的过程。显示的模型只是一个简单的例子。 Example model

在名为UserRole的users_roles实体中,我希望拥有UserName属性和RoleName

public class UserRole 
{
    public int Id { get; set; }
    public int IdUser { get; set; }
    public int IdRole { get; set; }

    public User User { get; set; }
    public Role Role { get; set; }

    [NotMapped]
    public string UserName
    {
        get { return User.Name; }
    }
    [NotMapped]
    public string RoleName
    {
        get { return Role.Name; }
    }
}

对我来说,对于将来的过滤,数据绑定等很重要。我不坚持这样的解决方案。这只是第一个想法。

目前,如果我尝试按UserNameRoleName过滤实体,我会遇到异常,因为数据库中不存在NotMapped属性。

第二件事是在DbContext处置后获取属性值。现在我正在使用.Include()方法(Eager Loading),但是有可能以某种方式获得上述功能(filterint等和急切的加载值)吗?

编辑1: 我正在使用Code First模型创建策略。 编辑2: 好的,澄清一下,最基本的答案是创建一个像这样的过滤方法

public IQueryable<UserRole> Filter(IQueryable<UserRole> query, string userName, string roleName)
{
    return query.Where(x => x.User.Name.Contains(userName) && x.Role.Name.Contains(roleName));
}

1 个答案:

答案 0 :(得分:1)

基本上,如果你会做像

这样的事情
Context.UserRole.Where(x=>x.UserName == "login")

你会有例外,正如你所描述的那样。您可以使用

来实现此目的
Context.UserRole.Include(x=>x.User).Where(x=>x.User.Name == "login")