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
,它仍然可以作为外键正常工作吗?我怎样才能摆脱这个错误呢?
你必须这样写
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")]