Я создаю модель сущности, в которой я хочу поместить не отображаемые свойства. Эти свойства позволяют упростить доступ к значениям из отношения. Показанная модель - всего лишь простой пример. Entity Framework, не отображаемое свойство в запросе
В users_roles сущности, названный UserRole
, я хочу иметь 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 и т. Д.)?
Edit 1: Я использую Code First
стратегию создания модели. Edit 2: Ok, чтобы уточнить, самый основной ответ должен создать метод фильтрации, как этот
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));
}
Вы добавили эти свойства через конструктора !!! вы должны добавить его вручную в класс, а не в designer.desginer ожидает отображения/моделирования базы данных для вещей, которые он показывает. –
Нет, это стратегия «Code First», поэтому у меня нет дизайнера. Я забыл написать. –
фильтрация не будет работать с Linq-to-entity, но, конечно же, используя linq для объектов, проверьте это - http://stackoverflow.com/questions/6065201/entity-framework-4-1-code-first-mapping-populating -a-single-property-from-two-db –