允许空外键GUID

我想创建一个类似GUID的可空外键,如下所示

 [ForeignKey("CreatedBy")] [Display(Name = "Created by")] public Guid? CreatedById { get; set; } public virtual User CreatedBy { get; set; } 

但是当我添加迁移并更新数据库时,它不会使它在SQL中的表设计中允许为null。

还有另一种方法可以让它首先通过模型允许null吗?

不确定为什么你的工作不起作用或你弄清楚了。 我们有相同的设计,我们可以获得可以为空的外键。 我们通常使用Fluent配置,但我们没有对这些属性进行任何配置,因为EF在没有帮助的情况下将其显示出来。 也许删除ForeignKey属性可能会修复它。

 public virtual User CreateUser { get; set; } public Guid? CreateUserId { get; set; } 

添加迁移时,将调用OnModelCreating方法以确定当前的模型配置。 在那里,如果您有这样的代码:

  modelBuilder.Entity() .HasMany(e => e.ChildEntity) .WithRequired(e => e.CreatedBy) .HasForeignKey(e => e.CreatedById); 

然后你告诉EF CreatedById是必需的,因此不可为空(从SQL的角度来看)。

要允许它可以为空,请将代码更改为:

  modelBuilder.Entity() .HasMany(e => e.ChildEntity) .WithOptional(e => e.CreatedBy) .HasForeignKey(e => e.CreatedById); 

请参阅: OnModelCreating和非自动迁移如何关联?