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