我定义了两个实体,如下所示,但发生了一个奇怪的行为:
[Table("ClientTypes", Schema="dbo")]
public ClientType {
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
[Table("Clients", Schema="dbo")]
public Client {
[Key]
public long Id { get; set; }
[ForeignKey("ClientTypeId")]
public int ClientTypeId { get; set; }
public virtual ClientType ClientType { get; set; }
}
我正在用一些值填充ClientTypeId
属性,但ClientType
对象什么都没有填充。有人能帮我吗?
谢谢大家!
ForeignKey
属性位于错误的属性上。
注释可以放置在外键属性上并指定相关联的导航属性名称,或者放置在导航属性上并规定相关联的外键名称。
-来源
[ForeignKey("ClientTypeId")]
应该改为装饰public virtual ClientType ClientType
,
或者将其更改为[ForeignKey("ClientType")]
并保持原样。
您是否急切地加载值?
var clients = context.Clients.Include("ClientType").ToList();
选择客户端时,必须Include
客户端类型
Client cli = (from c in db Clients.Include("ClientType")//or the name of the property
select c).First();
这将转换为左联接,并为Client和ClientType选择数据。如果跳过Include
,EF将在执行语句时仅为客户端选择数据。正如Mike所说,如果上下文仍然可用,那么当您访问它时,该属性将被延迟加载。