2013-05-03 2 views
2

У меня есть объект новостей, и я получаю новости на основе их NewsID. Теперь я определил новый объект, группу, и я хочу получать новости на основе их идентификатора группы. Я определил таблицу новостей группы, чтобы связать это с таблицей. enter image description hereРабота с рамками сущности: многие из многих таблиц отношений

в новостях модели у меня есть:

public virtual ICollection<GroupNews> RelatedGroupID { get; set; } 

Так я предположил, что я определил значения таблицы GroupNews и я могу использовать его в NewsService.

Теперь давайте посмотрим на NewsService:

Expression<Func<News, bool>> constraint = null; 

    if (user_id > 0 && project_id > 0) 
    { 
     constraint = e => (e.CreatorID == user_id && e.RelatedProjectTags.Any(p => p.ProjectID == project_id)); 
    } 
    else if (user_id > 0) 
    { 
     constraint = e => (e.CreatorID == user_id); 
    } 
    else if (project_id > 0) 
    { 
     constraint = e => (e.RelatedProjectTags.Any(p => p.ProjectID == project_id)); 
    } 

    else 
    { 
     constraint = null; 
    } 

    IEnumerable<News> result_list = null; 

    if (constraint != null) 
    { 
     result_list = newsRepository.GetMany(constraint).OrderByDescending(e => e.CreatedOn).Skip(offset); 
    } 
    else 
    { 
     result_list = newsRepository.GetAll().OrderByDescending(e => e.CreatedOn).Skip(offset); 
    } 

    if (count > 0) 
    { 
     result_list = result_list.Take(count); 
    } 

    return result_list.ToList<News>(); 
} 

}

добавить эту строку к нему для того, чтобы определить ограничение, основанный на GroupID.

else if (groupId > 0) 
    { 
     constraint = e => (e.RelatedGroupID.Any(n => n.GroupID == groupId)); 
    } 

это кажется неправильным и дает мне эту ошибку: { "Неверное имя объекта 'dbo.GroupNewsNews'"}

+0

Если вы используете Code First, почему бы вам не позволить EF генерировать базу данных для вас. Нет необходимости вручную создавать/изменять таблицы базы данных. – jure

+0

Пожалуйста, разместите классы 'GroupNews' и' News' и ваш класс контекста. – SOfanatic

+1

На основании вашего снимка экрана и сообщения об ошибке у вас есть таблица с именем «GroupNews», но EF пытается найти «GroupNewsNews». Возможно, вам придется переопределить имя таблицы: '[Таблица [" GroupNews ")]' – SOfanatic

ответ

5

1.You не нужно GroupNewsID в GroupNews Таблица. Вам нужно отбросить этот столбец и создать сложный ключ по GroupID и NewsID. В компания News необходимо определить свойство:

public virtual ICollection<Group> Groups 
    { 
     get; 
     set; 
    } 

В конструкторе по умолчанию для этого объекта вам необходимо инициализировать свойство (необходимо для ленивой нагрузки):

Groups = new List<Group>(); 

Подобных изменения в компании Группы.

2.In в GroupMap.cs вам нужно определить

this.HasMany(t => t.News) 
    .WithMany(t => t.Groups) 
    .Map(m => 
     { 
      m.ToTable("GroupNews"); 
      m.MapLeftKey("GroupID"); 
      m.MapRightKey("NewsID"); 
     }); 

3.Write тесты для NewsRepository и GroupRepository.

+0

, но тогда какой будет первичный ключ в таблице GroupNews? – matarsak

+1

Комбинация двух внешних ключей 'GroupID' и' NewsID' будет основным ключом. –

+0

, когда я добавляю новые новости, как я могу добавить связанный идентификатор groupID и newsID в таблицу GroupNews? – matarsak

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