数据库语言
我的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;