我已经删除了.edmx
并重新创建了多次!
问题是,只有部分ProductAttributes
(仅针对某些产品而非全部产品)在以下代码中返回:
var p = context.Products.FirstOrDefault(x => x.ProductNumber.Equals(productSku));x.ProductNumber.Equals(productSku));
foreach (var attr in p.ProductAttributes)
{
//only prints some results
}
以下工作正常:
var p = context.Products.FirstOrDefault(x => x.ProductNumber.Equals(productSku));
var pAttrs = context.ProductAttributes.Where(x => x.ProductNumber.Equals(productSku));
foreach (var attr in pAttrs)
{
//prints all of the results
}
为了确保我在这里设置正确的关系是一些屏幕截图:
修改
我确实从没有产品的ProductAttribute中删除了一两个产品,我初步意识到数据库迁移后没有一致性。所以我试图通过消除没有产品的ProductAttributes来清理数据。然后将关系置于游戏中,将现有数据集检查为是。
我目前只对两个表运行了以下查询。 ProductAttribute和Product,
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
如果产品表中没有ProductNumber参考的任何ProductAttributes,则查找(如果T1是productAttribute)。并返回0行。我认为这意味着ProductAttribute表没有没有出现在Product中的ProductNumbers。
答案 0 :(得分:0)
在ProductAttributes
Product
添加以下参考
using System.Data.Entity
并且
var p = context.Products.Include(p => p.ProductAttributes).FirstOrDefault(x => x.ProductNumber.Equals(productSku));
修改强>
这可能是您删除了一些产品并且没有删除productattributes或者数据库中存在不一致的情况。因此,您必须设置特定于Cascade
如果删除该产品,这将删除一个产品的ProductAttributes
答案 1 :(得分:0)
如果您使用的是EF:
默认情况下,EF使用延迟绑定,在您明确指定之前,不会从数据库中检索ProductAttributes
。
所以试试这个:
var p = context.Products.Include(x => x.ProductAttributes).FirstOrDefault(x => x.ProductNumber.Equals(productSku));
foreach (var attr in p.ProductAttributes)
{
// This should print out all data
}