Я пытаюсь создать общий репозиторий, используя Entity Framework 4.0, используя устаревшую базу данных MS SQL, которую я унаследовал.Довольно знакомый сценарий.
Мне нужно добавить информацию о категории в довольно длинный список существующих элементов.
Элементы могут одновременно принадлежать нескольким категориям, поэтому я создал таблицу сопоставления с именем CategoryMapping
![Database Diagram](https://farm6.static.flickr.com/5264/5597417399_a529174281_b.jpg)
К сожалению SchemaDefinitionCode не является уникальным и не может быть преобразован в внешний ключ (FK) в базе данных.
Я попытался добавить свой частичный класс в сущность DefinitionSchema, но, поскольку он не проиндексирован, это серьезно ухудшает производительность. Демонстрационный код для тестирования, я не хочу создавать новый контекст каждый раз, когда загружаю этот :
public partial class DefinitionSchema
{
private MyEntities context;
public IQueryable<Category> Categories
{
get
{
context = new MyEntities();
var categories = context.Categories
.Where(c => c.CategoryMappings
.Where(m => m.SchemaDefinitionCode == this.SchemaDefinitionCode).Any());
return categories;
}
}
}
Затем я могу вызвать список элементов, таких как:
var q = context.SchemaDefinitions
.Where(s => s.Categories
.Where(c => c.Name == category)
.Any()
);
Как наиболее эффективно связать мои таблицы и сопоставления, не стирая существующую структуру базы данных?