2013-10-03 3 views
0

У меня возникла проблема с настройкой моей собственной базы данных и относительной кодировкой приложения с Entity Framework, которые управляют языками.Как я могу управлять языками?

Обычно в моем старом проекте у меня есть таблица, скажем Страницы, которая содержит уникальную строку, которые идентифицируют одну страницу, с помощью стандартных информаций (которые не нуждаются в переводе на все):

ID 
Author 
Date 
Location 

Прикрепленные к этому у меня есть поддержка таблица Pages_L (1-N), который содержит языки данных, поэтому конкретную информацию переведена для каждой страницы-строки:

ID 
ID_PAGE 
LANGUAGE 
Title 
Description 
Notes 

Ну, стенд ard для базы данных! Нет избыточности данных.

проблема теперь стала в Entity рамочные, потому что для конкретной страницы, которую я хочу извлечь, мне нужно каждый раз, чтобы сделать выбор:

1 - first the page (a `.Where`); 
2 - than select the language (another `.Where`) 
3 - finally, select the field I want (let say, `Title`) 

Я нахожу это раздражает процесс, потому что, когда я делаю запрос мне нужно извлечь данные только фиксированного языка. Я имею в виду: когда мое приложение обрабатывает, язык ВСЕГДА один. Я не извлекаю некоторые из них на английском языке, некоторые на итальянском, некоторые во франках и т. Д.

Итак, что бы я хотел достичь, это своего рода «начальная точка языка» для всего контекста. На более поздней стадии так, мне просто нужно сделать:

Pages.Where(p=>p.ID==myID).FirstOrDefault().Title 

без прохождения trought Pages_L таблицы каждый раз.

Вопрос в следующем: могу ли я сделать это каким-то образом с Entity Framework? Я могу изменить все в своем проекте, поэтому все предложения были бы хороши! (от БД, к структуре сущности, к другим стратегиям поставки).

ответ

-1

Для использования различных языков на вашей странице вы можете использовать ресурсы страницы, Он не должен подключать базу данных к языковым значениям. вы можете проверить;

http://msdn.microsoft.com/en-us/library/ms227427.aspx http://msdn.microsoft.com/en-us/magazine/cc163566.aspx

+0

Но данные, которые я хочу показать, хранятся в базе данных, поэтому я каким-то образом их извлекаю ... – markzzz

0

Надежда Я не понял вас.

Почему бы вам просто не написать метод, который возвращает всю запись, которую вы ищете как объект, а затем из возвращаемого объекта, добирается до нужного поля? Метод вернет объект в тип страницы, но с помощью материала Include вы можете вернуть объект страницы с объектом Pages_L, связанным с ним, в соответствии с вашими ограничениями. Затем вы можете достичь любого поля в той части, которую хотите. Например, давайте назовем ваш метод myQuery.

Page page = myQuery(language, pageID); 
    string ttl = page.Pages_L.Title; 

Это должно сработать. Если это не так, вы можете использовать выражение лямбда для достижения названия или просто:

Page page = myQuery(language, pageID); 
    Pages_L pages_l = page.Pages_L; 
    tring ttl = pages_L.Title; 

должно работать.

Просто напишите метод, который возвращает страницу и Pages_L вместе как объект страницы, используя правильные аргументы LANGUAGE и ID.

public static Page (string lang, int pageID){ 
    YourDBName dbContext = new YourDBName; 
    List<Page> pageList = ctx.Page.Include("Pages_L").Where(p=>p.ID == pageID); 
    Pages_L pages_l = new Pages_L(); 
    foreach (Page page in pageList){ 
    pages_l = page.Pages_L; 
    if(pages_l.Language == lang){ 
    return page; 
    }}} 

Там должен быть лучшим способом сделать этот запрос, конечно, это немного хромой для устранения записей с Еогеасп, но у меня нет полезной базы данных для проверки такого запроса прямо сейчас. Кроме того, вам нужно вызвать эту функцию, если вы уверены, что есть хотя бы одна запись. Это похоже на «Первое», но не похоже на «FirstOrDefault». Однако это должно сработать, если я неправильно понял ваш вопрос. Если это помогает, вы можете улучшить качество запроса с помощью нескольких «Where» и некоторых лямбда-выражений; и без использования списка.

Смежные вопросы