EF代码中的可空属性

本文关键字:属性 代码 EF | 更新日期: 2023-09-27 18:17:19

希望大家都记得北风数据库。因为它有一个Employee表,它有一个对自己的自我引用。外键被命名为'ReportTo'或类似的东西,这是一个可空字段。

我正试图实现这样一个表的项目在手中使用EF代码第一加上MVC3。场景是这样的:有一个Man类,User就是从这个类派生出来的。上述字段"ReportTo"设置在后一个类(User)上。下面是POCO:

[LocalizedAttribute("ReportTo")]
    public long ReportsTo { get; set; }
    [ForeignKey("ReportsTo")]
    public virtual IList<User> ReportsChild { get; set; }

但是EF在数据库中生成这个字段为'Not Null'。我试图在IList<User>之后使用?,这看起来像IList<User>?产生错误。我还尝试将其定义为流畅的API:

modelBuilder.Entity<User>().Property(s => s.ReportsChild).IsOptional();

但是以上两种方法都会给我这个错误:

类型是System.Collections.Generic。IList'必须是一个非空值类型,以便在泛型类型或方法'System中用作参数'T'。Nullable '

我在网上浏览了一下,但是我只能找到和我已经做过的类似的解决方案。

原因可能是什么?如果我将IList<User>更改为User,它仍然可以作为外键正常工作吗?我怎样才能摆脱这个错误呢?

EF代码中的可空属性

你必须这样写

 public Nullable<long> ReportsTo { get; set; }

编辑

public long? ReportsTo { get; set; }

你实际上是在做一个一对多关系。这意味着是User 拥有外键。

有两种方法可以解决这个问题。

  • 将其转移到User实体。然后去掉illist。用实体的类型就行了。(员工)看这个

  • 去掉下面的:因为EF会自动为你映射。User表将自动创建该实体ID的FK列,这是一(该实体)对多(User)的关系。

    [LocalizedAttribute("ReportTo")] public long ReportsTo { get; set; } [ForeignKey("ReportsTo")]