我正在使用 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;}
}
我的控制器中的以下代码:
Models.Person model = myDBContext.Persons
.Include("CurrentStation")
.Include("CurrentTransportation")
.Where(p => p.ID == 1)
.FirstOrDefault();
即使DB 表 "persons" 中存在(1, "Testname", 0, 0)的行,"model" 也会为 NULL。
上面生成了一个 SQL 语句[...] INNER JOIN stations AS [...] LEFT JOIN transportations [...]
。对于我的所有模型,它总是为第一个导航属性执行 INNER JOIN,无论底层表/类型是什么或我指定它们的顺序,它始终是第一个 Include()。
我不想要一个 INNER JOIN,而是一个 LEFT JOIN,因为“CurrentStation”不需要在数据库中。
为什么英孚这样做???我不明白,但我想了解。我没有在任何属性上指定 [Required] 属性,但它的行为就像我做了一样。
不幸的是,没有 [Optional]-attribute 并且通过 OnModelCreate-override 执行“HasOptional()”对我来说不是一个选项。