gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:57:11 24 4
gpt4 key购买 nike

我有 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/

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