我想创建一个类型为GUID
的可为null的外键,如下
[ForeignKey("CreatedBy")]
[Display(Name = "Created by")]
public Guid? CreatedById { get; set; }
public virtual User CreatedBy { get; set; }
但是,当我添加迁移和更新数据库时,它并不允许SQL中的表设计为null。
有没有其他方法可以让它先允许null通过模型?
不确定为什么你的不起作用,或者你是否发现了。我们有几乎相同的设计,我们得到了可为null的外键。我们通常使用Fluent配置,但我们没有任何关于这些属性的配置,因为EF在没有帮助的情况下计算出了它们。也许删除ForeignKey属性可以修复它。
public virtual User CreateUser { get; set; }
public Guid? CreateUserId { get; set; }
添加迁移时,会调用OnModelCreating方法来确定当前模型配置。在那里,如果你有这样的代码:
modelBuilder.Entity<ParentEntity>()
.HasMany(e => e.ChildEntity)
.WithRequired(e => e.CreatedBy)
.HasForeignKey(e => e.CreatedById);
那么您告诉EFCreatedById是必需的,因此不可为null(从SQL的角度来看)。
要允许它为null,请将代码更改为:
modelBuilder.Entity<ParentEntity>()
.HasMany(e => e.ChildEntity)
.WithOptional(e => e.CreatedBy)
.HasForeignKey(e => e.CreatedById);
请参阅:OnModelCreating和非自动迁移之间的关系如何?