替换Group_Concat以自定义现有实体框架模型

本文关键字:实体 框架 模型 自定义 Group Concat 替换 | 更新日期: 2023-09-27 18:22:39

我使用的是一个多对多数据库,该数据库具有通过外键连接主数据表的联接表。

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

对于我的数据表示,需要将几行从属表字段(例如Genres.name)连接到数据绑定网格的一个单元格中。

书名|流派

一些书|小说;恐怖神秘


对于数据集,我将此SQL查询与GROUP_CONNCT一起用于此目的:

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,而且对它还很陌生,我不知道如何实现可以在具有实体的数据网格中显示的相同结果表。应该对实体模型进行什么样的更改才能获得相同的结果?

非常感谢您的帮助!


更新:

我有一个由数据库生成的实体模型(Model1.edmx和Model1.Designer.cs)。我需要编辑Model1.edrx(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; }
     }

现在我可以访问IDE IntelliSense中的GenresConcatenated属性,但当我运行应用程序时,它会抛出错误:

概念类型"MyNamespace.Book"中的成员数与对象端类型上的成员数不匹配"MyNamespace.Common.Book"。请确保成员数为相同的

它看起来像:

EntityDataSource不支持分部中的自定义属性类。它只返回模型中的实体。(绑定实体框架中的自定义属性)

所以我回到原点。:)

替换Group_Concat以自定义现有实体框架模型

怎么样,

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(或任何您想命名的名称)