我有 2 个简单的表和一个在 SQL Server Express 中定义的外键:
产品
公司
FK_产品_公司
我创建了一个 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/