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

标签 c# .net entity-framework

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

-用户 -评论

为此建立了一对多关系;从 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 导航属性,并且它知道该外部表的属性。这是怎么回事???

最佳答案

您可能需要在查询中添加“包含”语句,或禁用延迟加载 - 以下问题/答案中有一些示例: 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/

相关文章:

.net - 在 VB.NET 中将变量声明为 Byte 时出现的问题

c# - 自定义类型作为主键

java - 如何使用 JPA 2.1 转换连接的元素集合?

.net - .NET 4 中的新 HandleProcessCorruptedStateExceptions 属性

.net - Entity Framework : "ProviderName" in connection string required- all of the sudden?

c# - 我可以按任何顺序将中间件应用于应用程序吗?

c# - 为什么我的 PHP SHA256 哈希不等同于 C# SHA256Managed 哈希

c# - WCF 混合身份验证用户名和 WIndows

C# 最佳实践 : Editable state is a reference so still connected

c# - ASP.NET Core 1.1 在本地运行良好,但发布到 Azure 时显示 "An error occurred while starting the application."