2

数据库ML

我的 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 属性及其所有值。

当我在调试时在 Watch 对话框中查看 AuthorsForMedia 时,设置了以下值:

Count = 0 
HasLoadedOrAssignedValues = false
IsDeferred = false

问题 1

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

我尝试过的事情

读完这个问题后:

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

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

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

概括

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

4

2 回答 2

3

这就是 LoadWith 的外观。

DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<Books>(book => book.AuthorsForMedia);
db.LoadOptions = dlOptions;
于 2009-07-16T17:49:13.200 回答
1

DataLoadOptions 和 LoadWith() 是您所需要的。

你怎么称呼他们?

于 2009-07-13T19:21:16.280 回答