Замена Group_Concat для настройки существующей модели Entity Framework - PullRequest
2 голосов
/ 07 февраля 2012

Я использую базу данных «многие ко многим» с таблицами соединений, соединяющими основные таблицы данных через внешние ключи.

http://img12.imageshack.us/img12/6500/databasew.png

При моем представлении данных требуется объединить несколькостроки полей подчиненной таблицы (например, Genres.name) в одну ячейку сетки данных.

Название книги |Жанры

Некоторая книга |художественная литература;фильм ужасов;mystery


С набором данных я использовал этот запрос SQL с GROUP_CONCAT для этой цели:

SELECT Books.ID, Books.BOOKTITLE, GROUP_CONCAT(Genres.name, '; ') As Gen

FROM   Books INNER JOIN

       Books_Genres ON Books.ID = Books_Genres.book_id INNER JOIN
       Genres ON Books_Genres.genre_id =Genres.id

GROUP BY Books.ID

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

Любая помощь приветствуется!


Обновление:

У меня есть модель сущностей, сгенерированная базой данных (Model1.edmx & Model1.Designer.cs).Нужно ли редактировать Model1.edmx (XML-файл)?Несколько пошаговых инструкций очень помогли бы.Я только начинаю EF4, это все греческое для меня.:)

Я создал собственный класс:

public partial class Book {
        [EdmScalarProperty(EntityKeyProperty = false, IsNullable = true)]
        [DataMember()]
        public global::System.String GenresConcatenated
        {
            get { return string.Join("; ", Genres.Select(g => g.name));}
            set {}
        }
        private List<Genre> Genres{ get; set; }
     }

Теперь я могу получить доступ к свойству GenresConcatenated в IDE IntelliSense, но когда я запускаю приложение, оно выдает ошибку:

Количество членов в концептуальном типе «MyNamespace.Book» не совпадает с количеством членов на стороне объекта типа «MyNamespace.Common.Book».Убедитесь, что количество членов одинаково.

Похоже:

... EntityDataSource не поддерживает пользовательские свойства в частичных классах.Он возвращает только сущность, которая находится в модели. (Связывание пользовательского свойства в Entity Framework)

Итак, я вернулся к исходной точке.:)

1 Ответ

0 голосов
/ 07 февраля 2012

Как насчет

class Book 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public List<Genre> Genres { get; set; }

    public string Gen
    {
        get
        {
            return string.Join("; ", Genres.Select(g => g.Name));
        }
    }
}

затем привязать к Book.Gen (или как вы хотите его назвать)

...