Ale*_* K. 4 .net c# linq asp.net entity-framework
我正在使用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()"对我来说不是一个选项.
如果我没有弄错,为了允许属性是可选的或在数据库意义上,可以为空,你必须使属性可以为空.因此,对于CurrentStationId属性,您可以尝试按如下方式声明:
public int? CurrentStationId {get;set;}
Run Code Online (Sandbox Code Playgroud)
更新 此帖子可能对您的情况有所帮助.
| 归档时间: |
|
| 查看次数: |
3487 次 |
| 最近记录: |