我想创建一个类似GUID
的可空外键,如下所示
[ForeignKey("CreatedBy")]
[Display(Name = "Created by")]
public Guid? CreatedById { get; set; }
public virtual User CreatedBy { get; set; }
但是当我添加迁移并更新数据库时,它不会使它在SQL中的表设计中允许为空。
是否有另一种方法可以让它首先通过模型允许null?
答案 0 :(得分:1)
不确定为什么你的工作不起作用或你弄清楚了。我们有相同的设计,我们可以获得可以为空的外键。我们通常使用Fluent配置,但我们没有对这些属性进行任何配置,因为EF在没有帮助的情况下将其计算出来。也许删除ForeignKey属性可能会修复它。
public virtual User CreateUser { get; set; }
public Guid? CreateUserId { get; set; }
答案 1 :(得分:0)
添加迁移时,会调用 OnModelCreating 方法来确定当前的模型配置。在那里,如果您有这样的代码:
modelBuilder.Entity<ParentEntity>()
.HasMany(e => e.ChildEntity)
.WithRequired(e => e.CreatedBy)
.HasForeignKey(e => e.CreatedById);
然后您告诉EF CreatedById 是必需的,因此不可为空(从SQL角度来看)。
要允许它为可空,请将代码更改为:
modelBuilder.Entity<ParentEntity>()
.HasMany(e => e.ChildEntity)
.WithOptional(e => e.CreatedBy)
.HasForeignKey(e => e.CreatedById);
请参阅:How do OnModelCreating and non automatic Migrations relate?