替换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不支持分部中的自定义属性类。它只返回模型中的实体。(绑定实体框架中的自定义属性)
所以我回到原点。:)
怎么样,
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(或任何您想命名的名称)