Я строю новый проект с нуля.
Я создал базу данных, в которой последовательно применил структуру базы данных, которую я объясняю на коротком понятном примере:
Элемент таблицы -> (Id, Name) -> Содержит общую информацию
Таблица ItemInfo -> (Item_Id, Language, Description) -> Содержит информацию, зависящую от языка.
Id и Item_Id связаны отношением внешнего ключа.
Моя идея состояла в том, чтобы смоделировать его таким образом, чтобы в итоге я использовал только один объект POCO "Item", заполненный через Entity Framework. Этот объект будет содержать только открытые свойства: Id, Name и Description.
Язык будет скрыт для кода, использующего этот объект, сам объект должен отвечать за правильное описание в зависимости от глобальной переменной, содержащей язык.
Я пробовал несколько способов сделать это, и у меня всегда возникали проблемы, потому что Entity Framework не допускал такой сценарий. Мне всегда приходилось получать информацию для ВСЕХ языков, а не только для текущего, или использовать 2 разных запроса.
Итак, в конце концов я начал использовать решение, позволяющее шаблону T4 создавать Item и ItemInfo, а затем я вручную добавил код, подобный следующему:
public partial class Item
{
private ItemInfo _itemInfo = null;
private ItemInfo itemInfo
{
get
{
if (_itemInfo == null) _itemInfo = ItemInfoes.Single(p => p.Language == GlobalContext.Language);
return _itemInfo;
}
}
public Description
{
get { return itemInfo.Description; }
set { itemInfo.Description = value;}
}
}
С помощью этого кода я добавил дополнительные свойства ItemInfo в Item и выбрал правильный язык в соответствии с моими требованиями.
Как вы думаете, это хорошее решение? Как бы вы решили эту проблему вместо этого?
Однако, запустив SQL Server Profiler, я вижу, что для заполнения объекта Item используются 2 разных SQL-запроса, один из которых запрашивает таблицу Item, а другой - ItemInfo.
Может ли тот же сценарий быть достигнут с помощью одного запроса, который объединяет две таблицы? (Я боюсь долгосрочного снижения производительности, а также так я бы сделал это без ORM).
Любые предложения будут приветствоваться, у меня есть многолетний опыт программирования, но я новичок в Entity Framework и ORM в целом.
Пожалуйста, помогите.