实体框架-该属性不能配置为导航属性



我定义了两个实体,如下所示,但发生了一个奇怪的行为:

[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所说,如果上下文仍然可用,那么当您访问它时,该属性将被延迟加载。

最新更新