我所在的项目首先使用Entity Framework 6代码,并拥有中央数据库和本地数据库。中央数据库与本地数据库相同,但所有关系(外键,主键等)都已被删除。
让我们想象一下,我有以下几个类:
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public int ProductTypeId { get; set; }
public ProductType ProductType { get; set; }
}
public class ProductType
{
public int ProductTypeId { get; set; }
public string Name { get; set; }
public List<Product> Products { get; set; }
}
如果数据库在Product表中有外键我可以
IEnumerable<Product> products = ctx.Produts.Include(x => x.ProductType);
如果数据库没有外键,EF是否仍会使用上面的代码加载ProductType对象?
答案 0 :(得分:0)
如果没有外键,EF将不会加载ProductType对象。
您需要执行新查询。像这样:
IEnumerable<Product> products = ctx.Produts;
foreach (var product in products )
{
ProductType type = (from t in ctx.ProductType where t.ProductTypeId == product.ProductTypeId select t).Single();
product.ProductType = type;
}
答案 1 :(得分:0)
我很好奇这个,所以我嘲笑了一个快速测试,我用它运行,然后在数据库中没有外键。答案似乎是肯定的,如果您仍在实体框架中配置了密钥,它将起作用。但是请注意,当然,如果没有密钥,数据库显然不会强制执行参考约束,尽管它看起来像EF。