我正在使用EF6.1 Database First / ObjectContext / POCOs。
我有一个名为Foo的表和另一个名为FooHistory的表。这就是我的模型的样子:
由于遗留原因,FooNo是Foo的主键,但不是FooHistory,并且数据库中存在外键约束 。但是,这是一个逻辑外键,因此我在Foo和FooHistory之间建立了1到多个独立关联。 Principal / Dependent属性为FooNo。
以下Linq-to-Entities查询:
var qry = from f in context.Foo.Include("History")
where f.FooNo.Trim() == "SomeNo"
select f.History.Count();
返回值6,而发送到数据库的SQL返回10行(这就是我想要的)。
我设法通过在FooNo上的数据库中创建外键约束并更新模型来获取查询以给我完整的10行。此时,关联属性中的参照约束EF已更改为数据库约束的名称。多样性也发生了变化,从0到1变为多数。
但是,我想了解为什么第一种方法不起作用 - 为什么在两种情况下发送到数据库的查询都相同时结果会有所不同?究竟内部发生了什么?