小编Ale*_* K.的帖子

EF Include始终为第一个导航属性生成INNER JOIN

我正在使用Code First方法并具有以下模型:

public class Person
{
    public int ID {get; set;}
    public string Name {get; set;}

    public int CurrentStationID {get; set;}
    public virtual Station CurrentStation {get; set;}

    public int CurrentTransportationID {get; set;}
    public virtual Transportation CurrentTransporation {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

以下代码在我的控制器中:

Models.Person model = myDBContext.Persons
                        .Include("CurrentStation")
                        .Include("CurrentTransportation")
                        .Where(p => p.ID == 1)
                        .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

即使在DB表"人员"中存在具有(1,"Testname",0,0)的行,"model"也将为NULL .

以上生成一个SQL语句[...] INNER JOIN stations AS [...] LEFT JOIN transportations [...].对于我的所有模型,它始终为第一个导航属性执行INNER JOIN,无论基础表/类型是什么或我指定它们的顺序,它始终是第一个Include().

希望INNER JOIN而是所有的LEFT JOIN,因为"CurrentStation"不需要在数据库中.

为什么EF会这样做?我不明白,但我想明白.我没有在任何属性上指定[Required] - 属性,但它的行为就像我做的那样.

不幸的是,没有[Optional] -attribute并且通过OnModelCreate-override执行"HasOptional()"对我来说不是一个选项.

.net c# linq asp.net entity-framework

4
推荐指数
1
解决办法
3487
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

entity-framework ×1

linq ×1