.net - 为什么简单的实体数据模型关系返回 null 而不是对象的引用?

标签 .net entity-framework

我有 2 个简单的表和一个在 SQL Server Express 中定义的外键:

产品

  • ProductID [汽车公司]
  • 姓名
  • 公司 ID [非空]

  • 公司
  • CompanyID [auto-inc]
  • 姓名

  • FK_产品_公司
  • Product.CompanyID = Company.CompanyID


  • 我创建了一个 ADO.NET 实体数据模型并将所有表添加到其中。 .edmx 文件显示设计器中的一对多关系。我用数据手动填充了数据库,以确保每个产品都有一个公司。然而,每当我尝试访问产品的公司时,它总是返回 null 而不是公司的实例。

    例如,在 C# 中运行以下代码,返回 null:
    var _db = new MyDBEntities();
    var product = (from p in _db.Product
                   where p.ProductID == 3
                   select p).First();
    product.Company // == null
    

    是否有任何步骤让我无法正常工作?

    谢谢

    我尝试过的事情:

    运行以下 SQL,正确返回公司记录。
    SELECT Company.*
    FROM Product
      LEFT JOIN Company ON (Product.CompanyID = Company.CompanyID)
    WHERE Product.ProductID = 3
    

    为了调试这个问题,我接下来要做的就是运行以下代码:
    var _db = new MyDBEntities();
    var product = (from p in _db.Product
                   where p.ProductID == 3
                   select p).First();
    var company = (from c in _db.Company
                   where c.CompanyID == product.CompanyID
                   select c).First();
    

    但是,这不会编译,因为字段 Product.CompanyID 被 ORM 生成器隐藏,我在设计器中没有看到添加它的选项。

    我猜接下来最好的事情是以下内容,它确实返回了一家公司:
    var _db = new MyDBEntities();
    var company = (from c in _db.Company
                   where c.CompanyID == 2
                   select c).First();
    

    需要明确的是,ID 为 3 的产品对应于 ID 为 2 的公司。

    我尝试使用 LINQ to SQL 类创建完全相同的关系,它工作正常。

    当然,我没有使用 DB Entities 类,而是使用了 Data Context 类。

    最佳答案

    您需要将 .Include 方法添加到您的查询中。

    var _db = new MyDBEntities();
    var product = (from p in _db.Product.Include("Company")
                   where p.ProductID == 3
                   select p).First();
    

    关于.net - 为什么简单的实体数据模型关系返回 null 而不是对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551931/

    相关文章:

    c# - 使用 Linq 从另一个表中获取按记录数排序的列表

    c# - 从 Azure 表存储检索超过 100 万条记录

    c# - 如何正确使用TransactionScope?

    c# - 上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的

    c# - Entity Framework - 使用多个 edmx 文件

    c# - ObjectContext 未被垃圾收集

    c# - 更新查询需要删除并重新插入所有相关项目,这会降低我的应用程序的速度

    c# - Azure 云服务 Web 角色未启动 - 未处理的异常 - 无法找到程序集

    .net - 在Powershell中运行外部程序的替代方法

    .net - Sharepoint CMS 与 UmbracoCMS