实体框架,查询中未映射属性

问题描述 投票:0回答:1

我正在创建一个实体模型,我想在其中放置未映射的属性。这些属性是为了简化对关系中的值的访问。所示模型只是一个简单的示例。 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; }
    }
}

这对我以后的过滤、数据绑定等很重要。我不坚持这样的解决方案。这只是第一个想法。

目前,如果我尝试通过

UserName
RoleName
过滤实体,则会出现异常,因为数据库中不存在
NotMapped
属性。

第二件事是在

DbContext
处理后获取属性值。现在我正在使用
.Include()
方法(预加载),但是是否可以以一种方式获得上述功能(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));
}
c# entity-framework dbcontext
1个回答
0
投票

基本上,如果你会做类似的事情

Context.UserRole.Where(x=>x.UserName == "login")

正如您所描述的,您将有一个例外。您可以通过使用来实现此目的

Context.UserRole.Include(x=>x.User).Where(x=>x.User.Name == "login")
© www.soinside.com 2019 - 2024. All rights reserved.