【发布时间】:2020-01-24 12:06:19
【问题描述】:
已解决
我试图弄清楚如何从实体框架中的表中检索相关数据的集合,但我还没有解决它。
两个表之间是多对多的关系,如下图所示:
我的问题是我想将相关的 BOOK 检索给 Author,它是 BOOK 表的 ICollection,但是当我返回时它给了我一个空列表。 我尝试使用显式加载来解决这个问题:
public AUTHOR Read(int Aid)
{
using(var db = new LibraryDBEntities1())
{
var author = db.AUTHORs.Find(Aid);
db.Entry(author).Collection(a => a.BOOKs).Load();
return author;
}
}
我也尝试过使用急切加载来解决它
return db.AUTHORs.Where(a => a.Aid == Aid).Include("BOOKs").FirstOrDefault();
但它也没有工作。我试图按照 microsoft docs Loading Related Entities 上的文档进行操作,但我无法弄清楚我做错了什么。 有人可以帮我解决这个问题,也许可以解释我哪里做错了吗?
编辑 1 这就是 OnModelCreating 的样子。我应该在这里更改/添加代码吗?我一直在使用数据库优先的方法。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
编辑 2
数据库连接应如下所示:
编辑 3
我忘了提到我正在使用 3 层架构,包括表示层 (MVC)、业务逻辑层和数据访问层。还有一个包含数据库的数据层,如下图所示。
解决方案
所以我终于解决了!所以问题并不是我最初认为的问题,而是我如何使用 Mapper 的问题。 我必须在我的模型中添加以下代码才能使其工作:
authorObj.BooksList = Mapper.Map<List<BOOK>, List<Book>>(aauthor.BOOKs.ToList());
现在它可以正常工作了!
【问题讨论】:
-
你是如何在你的 c# 模型中定义多对多关系的(你能从你的上下文文件的 OnModelCreating 中发布 sn-p
-
@sam 感谢您的评论!我是实体框架的新手,所以我不知道我应该更改上下文文件中的任何内容。我已经编辑了问题并在 OnModelCreating 上添加了一个 sn-p
-
您使用的是哪个 EF 版本?
-
@ilkerkaran 我使用的是 EF 版本 6.4.0
-
@JulijusErgül 你不想做任何事情。我觉得你的
..Include("BOOKs")有问题,你可以试试Include(a => a.Books)吗?
标签: c# asp.net-mvc entity-framework