我正在创建一个实体模型,我想在其中放置未映射的属性。这些属性是为了简化对关系中的值的访问。所示模型只是一个简单的示例。
在名为
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));
}
基本上,如果你会做类似的事情
Context.UserRole.Where(x=>x.UserName == "login")
正如您所描述的,您将有一个例外。您可以通过使用来实现此目的
Context.UserRole.Include(x=>x.User).Where(x=>x.User.Name == "login")