数据库语言

我的dbml中有以下实体:(以示例为单位)

Book <- Media -> AuthorsForMedia <- Author


箭头是我的dbml中的关系。

一本书是一种媒体,一本书的实例具有媒体属性,该属性具有其中所有媒体都通用的值。 AuthorsForMedia是一个具有AuthorId,MediaId和AuthorsForMediaId的相交表。

询问

我在存储库中的查询是:

public Book Get(int id)
{
    var query = from b in db.Books
                where b.BookId == id
                select b;

    return query.Single();
}


生成的对象设置了book属性,并且设置了其所有值的media属性。

在调试时在“监视”对话框中查看AuthorsForMedia时,将设置以下值:

Count = 0
HasLoadedOrAssignedValues = false
IsDeferred = false


问题1

为什么不能通过延迟加载来评估AuthorsForMedia的值(及其对应的Author属性)?

我尝试过的事情

看完这个问题:


LINQ to SQL eager loading with conditions


我用LoadWith / AssoicateWith尝试了DataLoadOptions,但是它没有用。我最终遇到了类似的错误


无法创建类Foo的实例错误:System.NotSupportedException:类型Book的媒体不支持子查询
... System.InvalidOperationException:指定的表达式必须具有p.A的形式,其中p是参数,而A是属性或字段成员
或价值不存在


如果有帮助,我可以提供所有代码片段,但我认为这是一个概念性问题,而不是一个句法问题。

摘要

我应该如何检索这些值,应该是左联接还是到目前为止找不到的其他东西?

最佳答案

这就是LoadWith的外观。

DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<Books>(book => book.AuthorsForMedia);
db.LoadOptions = dlOptions;

09-15 21:08