gpt4 book ai didi

c# - Entity Framework - 使用外键获取空异常

转载 作者:行者123 更新时间:2023-11-30 22:46:39 25 4
gpt4 key购买 nike

在处理本应非常简单的场景时遇到了一些麻烦。出于示例目的,我有两个表:

-用户-评论

为此设置了一对多的关系;从 Comments.CommentorIDUsers.UserID 有一个外键。当我执行 LINQ 查询并尝试绑定(bind)到 DataList 时,我得到一个 null 异常。这是代码:

FKMModel.FKMEntities ctx = new FKMModel.FKMEntities();
IQueryable<Comment> CommentQuery =
from x in ctx.Comment
where x.SiteID == 101
select x;
List<Comment> Comments = CommentQuery.ToList();
dl_MajorComments.DataSource = Comments;
dl_MajorComments.DataBind();

在 ASPX 页面中,我将以下内容作为 ItemTemplate(我对其进行了简化并删除了样式等,以便在此处发布,因为它是不相关的):

<div>
<%# ((FKMModel.Comment)Container.DataItem).FKMUser.Username %>
<%# ((FKMModel.Comment)Container.DataItem).CommentDate.Value.ToShortDateString() %>
<%# ((FKMModel.Comment)Container.DataItem).CommentTime %>
</div>

异常发生在第一个绑定(bind) (FKMUser.Username) 上。由于设置了外键,我应该可以毫无问题地访问 Users 表中的任何属性。 Intellisense 设置了 FKMUser 导航属性,它知道该外部表的属性。这是怎么回事???

最佳答案

您可能需要在查询中添加“Include”语句,或禁用延迟加载 - 以下问题/.answers 中有一些示例: Entity Framework - Inheritance with .Include?

在您的示例中,您需要按如下方式添加 Include:

IQueryable<Comment> CommentQuery =
from x in ctx.Comment
.Include("<name of FK navigation property">)
where x.SiteID == 101
select x;

或者您可以明确禁用上下文的延迟加载 - 取决于您的设计,因为执行完整的对象图加载可能是一项昂贵的练习。我写了一个blog post前一段时间解决了 EF v1 中 FK 的一些“乐趣”。

此外,您可以明确确保通过专门加载 FK(导航属性)来加载它,比如在数据绑定(bind)上。

if (!<entity>.<navigation property>.IsLoaded)   //Ensure the relationship has loaded 
<entity>.<navigation property>.Load();

关于c# - Entity Framework - 使用外键获取空异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com